2017-09-07 10 views
0

私はトラフィックをいくつかの国に制限しようとしていますが、私は単一のIPアドレスをホワイトリストに載せたいと思っています。ここに私のconfファイルです:複数の国をnginxでブロックしながらIPをホワイトリストに登録しますか?

# restrict access by country 
    geoip_country /usr/share/GeoIP/GeoIP.dat; 
    map $geoip_country_code $allow_visit { 
     default no; 
     US Yes; 
     GB Yes; 
     IL Yes; 
     CA Yes; 
    } 

    ## 
    # Virtual Host Configs 
    ## 

    server { # simple reverse-proxy 

     listen  80; 
     server_name xXmySiteXx; 

     root /usr/share/nginx/html; 
#  root /var/www/html; 
     index index.php index.html index.htm; 

      if ($scheme != "https") { 
       return 301 https://$host$request_uri; 
      } # managed by Certbot 

    # reject unauthorized countries 
    if ($allow_visit = no) { 
     return 403; 
    } 

私は次を追加しようとしました:

if($remote_addr = ipInQuestion) { 
    set $allow_visit = yes; 
} 

しかし、私はnginxのをリロードしようとすると、それが失敗しました。私が間違ってやっていることやこれを行うためのよりよい方法は何ですか?

EDIT:

私はnginxのから取得するエラーは次のとおりです。

nginxの:[EMERG]未知のディレクティブ "もし($ REMOTE_ADDR"

+0

リロードしようとしたときに表示されるエラーは何ですか? – jpevarnek

+0

関連のないメモとして、ifステートメントで変数を設定する必要はありません。 https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ – jpevarnek

+0

@jpevarnekが上記のエラーを追加しましたが、それはnginxです:[emerg]未知の指令 "if($ remote_addr" - 変数を設定するには、これを達成するための他のアイデアはありますか? – Matt

答えて

1

ifで問題を理解しましたが、ifステートメント内のsetステートメントから問題に陥る可能性があります。

、あなたの最良のオプションは、別のマップを作ることであれば内セットを取り除くために:

map $remote_addr $real_allow_visit { 
    default $allow_visit; 
    ipInQuestion no; 
} 
0

私はそれが悪い習慣だ知っているが、

if ($remote_addr = ipInQuestion) { 
    set $allow_visit yes; 
} 
:私はもしメソッドを使用して設定する変数を取得することができました...私はに私のコードの第2の部分を微調整しなければなりませんでした

具体的には、ifと(およびset文から=を削除する)の間にスペースを追加する必要がありました。これらのことをした後、nginxはテストに合格し、リロードします。

関連する問題