私の環境には、いくつかのシステムを通過するユーザーリクエストがあります。
[クライアント]-> [ELB] ---> [nginx]-> [ウェブ]
(ELB = AWS Elastic Load Balancer)
これのおかげで answer 、私はnginxに正しいクライアントIPアドレスを決定し、X-Forwarded-For
およびX-Real_IP
ヘッダーを使用して上流サーバー(ウェブ)に渡します。関連するnginx設定:
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
real_ip_recursive on;
proxy_set_header X-Real-IP $remote_addr;
私の問題はこれです、nginxの実際のIPモジュールは、既存の$remote_addr
変数をX-Forwarded-For
計算の結果に置き換えます。これにより、元のクライアントIPが得られますが、実際にリクエストをプロキシ(ELBなど)に送信したシステムのIPアドレスが失われます。
全体として、クライアントIPを持つことは私にとってより重要ですが、トラフィックの流れを理解(およびデバッグ)できるように、リクエストのチェーン全体をログに記録できるようにしたいと考えています。現在、私はnginxにクライアントIP、自身のIP、および上流サーバーのIPのみを記録させることができます。 ELB IPもログに記録できるようにしたいと思います。
私は X-Istence が2013年に同じように尋ねられた question を見ますが、ほとんど運がありません。それ以来何か変更または改善されましたか?
変数$realip_remote_addr
で接続ELBの元のクライアントアドレスを取得できますが、この変数はnginx 1.9.7でのみ追加されているため、実行する必要がありますnginxの最新バージョン。