実際のIPアドレスを1つのnginxインスタンスから別のインスタンスに渡し、それをログに書き込む

実際のIPアドレスを1つのnginxインスタンスから別のインスタンスに渡し、それをログに書き込む

リクエストを内部の nginx サーバーに移動するには、呼び出しに次のコードを追加します。

proxy_set_header X-Real-IP $remote_addr;

この値をログに出力しようとすると、コンテナの内部 nginx がクラッシュします。

log_format verbose ' Real: $X-Real-IP ';

何が間違っているのでしょうか? (変数を "" で囲んで試してみましたが、効果はありませんでした。)

答え1

サーバーは、X-Real-IPHTTP リクエストのヘッダーの 1 つとして受信します。Nginx は、各リクエスト ヘッダーの値を変数として使用できるようにします。

http リクエスト ヘッダー値の変数名は で始まります$http_。ヘッダー名は小文字に変換され、各ハイフンはアンダースコアに置き換えられます。

例えばX-Real-IP$http_x_real_ip

見るこのドキュメント詳細については。

答え2

ngx_http_realip_moduleこれを使用すると、nginx 内のどこでも、ヘッダー内の IP アドレスをソース IP として使用できるようになります。

次のように構成されています。

set_real_ip_from 192.168.1.1 # IP address of the external nginx
real_ip_header X-Real-IP;

このモジュールを使用すると、独自のログ形式を定義する必要がなくなり、nginx は実際のクライアント IP をログ ファイルやその他のすべての場所にソース IP アドレスとして出力します。

関連情報