
serverfault で検索しましたが、これに対する答えは見つかりませんでした。正しいキーワードを知らないだけかもしれませんし、概念的な誤解かもしれません。どなたか助けていただければ幸いです。
状況:
- 私のローカルサービスはNGINXリバースプロキシの背後で実行されています
- 私はルーター上の LAN DNS (Draytek)*.example.com へのローカル要求をローカル サーバー (192.168.1.2) に直接解決します。
インターネットに接続していなくても、ドメインはローカル サーバーに解決され、すべてのサービスにアクセスできます。これが、私が LAN DNS を使用する理由です。これまでのところ、順調です。
ここで、ローカルクライアントのみが特定のサービスにアクセスできるようにしたいのですが、NGINX アクセス モジュールと:
allow 192.168.1.0/24;
deny all;
しかし、NGINX はクライアントの IP (192.168.1.100) ではなくルーターのパブリック IP のみを認識するため、すべてのリクエストが拒否されます。
[...] access forbidden by rule, client: 123.123.123.123, server: service.example.de, request: [...]"
私の質問は次のとおりです:
このシナリオでは、NGINX 上のローカル クライアントとリモート クライアントをどのように区別すればよいでしょうか?
答え1
まず前提/条件は、ルータがX-転送先ヘッダーまたは類似のもの(実際のクライアント IP のトレースを保持)
まずクライアントのIPを解決する必要があります。ngx_http_realip_モジュール
そこで提供されている設定例:
set_real_ip_from 192.168.1.0/24;
set_real_ip_from 192.168.2.1;
set_real_ip_from 2001:0db8::/32;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
これにより、アクセス チェックに使用される IP が正しいもの (実際のクライアント) になります。
注意すべき点は、このような構成では、X-Forwarded-Forヘッダーにルーターを追加しようとすると、自動的にproxy_add_x_forwarded_forでは、追加されたIPは前のディレクティブによって変更されているため、この特定のケースについては議論されています。スタックオーバーフローについて