web-dev-qa-db-ja.com

Nginx-オリジンIPを許可する

Nginxは、IPを制限するためにallowおよびdeny構文をサポートしています。 allow 192.168.1.1;。ただし、トラフィックがリバースプロキシを通過する場合、IPはプロキシのIPを参照します。では、特定のオリジンIPをホワイトリストに登録し、他のすべての着信要求を拒否するように構成するにはどうすればよいでしょうか。

11
mahemoff

remote_addrはプロキシを参照しますが、ヘッダーフィールドX-Real-IP/X-Forwarded-Forを使用してクライアントアドレスを送信するようにプロキシを構成できます。

ngx_http_realip モジュールと組み合わせると、remote_addrに実際のクライアントアドレスを使用するように着信ヘッダーを変更できます。これは、allow/deny構文で期待どおりに機能すると思います。

明確にするために、モジュールを有効にして構成した後、allow/deny構文は同じである必要があります。以下のIPアドレスとプロキシアドレスに置き換えてください。

バックエンドnginxの許可/拒否:

location / {
    allow <your ip>;
    allow 127.0.0.1;
    deny  all;
}

バックエンドnginxrealip構成:

set_real_ip_from  <your proxy>;
real_ip_header    X-Forwarded-For;

Nginxプロキシ構成の場合:

proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

複数の中間プロキシが関係している場合は、real_ip_recursiveを有効にし、set_real_ip_fromディレクティブを使用して追加のアドレスをホワイトリストに登録する必要があります。

12
ngraves

http_geoモジュールを使用して、次の構成で動作させました。

geo $remote_addr $give_access {
    proxy 172.0.0.0/8; # <-- Private IP range here
    default 0;
    11.22.33.44 1; # <-- Allowed IP here
}


server {

    # more config ... 

    location ^~ /secure_url_here {
        if ($give_access = 0) {
          return 403; 
        }
        try_files $uri $uri/ /index.php?$args; # <-- Your directive here
    }
}

参照: http://nginx.org/en/docs/http/ngx_http_geo_module.html

1
Seff