nginx設定変更

今まではaccess.logの表示がELBからのaccessと言うことでRemote_AddressはELBのIP(Private IP)になっていました。
10.x.x.x これだとさっぱりわかんねー

10.150.126.145 – – [25/Jan/2012:08:43:11 +0900] “GET /wp-content/plugins/wptouch/themes/default/style.css HTTP/1.1” 200 47051 “https://www.barasu.org/pc/windows/2877.html” “Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3” “xxx.xxx.xxx.xxx, 10.156.115.4”

確かにaccess.logにReal IPも埋め込まれいるけどいろいろ面倒だよねぇ。
WordPress上のコメントでは

ELBはX-Forwarded-Forのサポートをしているということでnginx側で設定変更を行ってみた。

参考URLは[Amazon][ELB][EC2][Nginx] ELBとNignxを利用した場合の注意点と解決策

nginxはyumで入れたので–with-http_realip_module付きでコンパイルされているか確認

nginx -Vで一覧表示されます。

nginx version: nginx/0.8.54
built by gcc 4.4.5 20110214 (Red Hat 4.4.5-6) (GCC)
TLS SNI support enabled
(略) –with-http_ssl_module –with-http_realip_module –with-http_addition_module (略)’

もともと–with-http_realip_moduleがついていたので設定だけの書き換えでOK

/etc/nginx/nginx.confに下記2行を追加

set_real_ip_from 10.0.0.0/8;
real_ip_header X-FORWARDED-FOR;

set_real_ip_from ではEBLのIPレンジを書きます。面倒なので10.0.0.0/8にしました。
real_ip_header X-FORWARDED-FOR; にはReal IPのHTTPヘッダーフィールドを書きます。

これでnginxのサービス再起動を行って終了

これでaccess.logにもちゃんとRemote_AddressはGlobal IPが表示されます。

yyy.yyy.yyy.yyy – – [25/Jan/2012:13:05:11 +0900] “GET /wp-content/plugins/jquery-colorbox/themes/theme1/images/border.png HTTP/1.1” 200 112 “https://www.barasu.org/diary/7115.html” “Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3” “yyy.yyy.yyy.yyy”