IP に基づいて NGINX で位置情報を許可する - リクエストは Varnish から送信されます

IP に基づいて NGINX で位置情報を許可する - リクエストは Varnish から送信されます

Varnish が NGINX バックエンドの前のデフォルト キャッシュとして設定されている場合、クライアントの元の IP を NGINX バックエンドで確認し、それに基づいて決定するにはどうすればよいでしょうか?

特定のディレクトリを特定の IP のみに許可したいです。 Varnish が NGINX の前にあるということは、すべてのリクエストが から来ることを意味します127.0.0.1。 カスタム HTTP ヘッダーを設定することを考えていますが、セクションと組み合わせてそれをどのように確認すればよいでしょうかlocation ~ /folder/ {}?

答え1

Varnish 4のデフォルトではX-Forwarded-For ヘッダークライアントの実際の IP として認識されますが、明示的に設定しない限り、NGINX はこれを無視します。

これらの行をnginx設定のサーバーブロックに追加します。ngx_http_realip_モジュール:

server {
    listen 80;
    set_real_ip_from   127.0.0.1;
    real_ip_header     X-Forwarded-For;
    <Other Server Options>
}

Ubuntu を使用している場合、モジュールはデフォルトですでに有効になっています。ただし、一部の Linux ディストリビューションでは、手動で有効にしたりインストールしたりする必要があるかもしれません。構成されたモジュールは、次の方法で確認できます。

nginx -V

設定を更新した後は、nginx をリロードすることを忘れないでください。

sudo service nginx reload

nginx が Varnish によって設定されたクライアントの実際の IP を取得できるようになると、location ブロックに allow および deny オプションを配置するだけです。

server {
    <Server Options>
    location ~ /folder/ {
        allow <IP to whitelist>;
        deny all;
        <Location Options>
    }
}

関連情報