Nginx で Elastic Load Balancing などの Proxy の内側で正しい IP アドレスを取得する

EC2 だと ELB の内側では、nginx のアクセスログに ELB の IP アドレスが記載されてしまうので、HttpRealIpModule を使って Apache の mod_rpaf、lighttpd の mod_extforward と同じような挙動を設定します。

configure オプションに

--with-http_realip_module

が必要ですので、nginx -V で configure オプションを確認して、入っていなかったらコンパイルし直しましょう。

実際の設定は以下です。set_real_ip_from に ELB など Proxy やロードバランサーの IP を指定します。real_ip_header には、X-Real-IP や X-FORWARDED-FOR など Proxy が追加するヘッダーを指定してください。

http {
    set_real_ip_from    10.0.0.0/8;
    real_ip_header     X-Forwarded-For;
}

[2015-02-10 追記]
VPC で複数のサブネットを指定したい場合は下記のように複数行で記述する。

http {
    set_real_ip_from    10.0.1.0/24;
    set_real_ip_from    10.0.4.0/24;
    real_ip_header      X-Forwarded-For;
}