web-dev-qa-db-ja.com

Real-IPを使用しているときに$ remote_addrの元の値をログに記録する方法

私の環境には、いくつかのシステムを通過するユーザーリクエストがあります。

[クライアント]-> [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 を見ますが、ほとんど運がありません。それ以来何か変更または改善されましたか?

9
michaelg

変数$realip_remote_addr で接続ELBの元のクライアントアドレスを取得できますが、この変数はnginx 1.9.7でのみ追加されているため、実行する必要がありますnginxの最新バージョン。

8
Michael Hampton