創屋ぷれす

AWS ELB経由でApacheのログがELBのIPアドレスになる

AWSのElastic Load Balancer経由でHTTPのリクエストを受けた時に、
ApacheのアクセスログにELBのIPアドレスが出力されてしまう点への対応方法

ELBからHTTP/HTTPSで転送している場合、
‘HTTP_X_FORWARDED_FOR’ ヘッダにクライアントIPのアドレスがはいります。
※イメージとしてはこのページがわかりやすいです。

Apache2.2系標準のログ出力のままだとIPアドレスが全部ELBのアドレスになるので
設定ファイルに独自LogFormatを追加して、クライアントのIPアドレスを出すようにします。
# vi /etc/httpd/conf/httpd.conf
------------------------------------------------------------
LogFormat "%{HTTP_X_FORWARDED_FOR}e %l %u %t \"%r\" %>s %b
\"%{Referer}i\" \"%{User-Agent}i\"" aws-elb

#CustomLog logs/access_log combined
CustomLog logs/access_log aws-elb
------------------------------------------------------------

HTTP_X_FORWARDED_FORは環境変数として取得できるので、
%{HTTP_X_FORWARDED_FOR}e
と書きます。

あとはApacheをreloadして
access_logの先頭にELBのIPアドレスがでていたのが
10.150.109.xxx - - [25/Feb/2012:13:51:58 +0900] "GET /login HTTP/1.1"
200 2472 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11
(KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"

クライアントIP,ELBのIPアドレスが出力されるようになることを確認
210.147.29.xx, 10.150.109.xxx - - [25/Feb/2012:14:07:19 +0900] "GET
/login HTTP/1.1" 200 2472 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64)
AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"

注意点
・ELBからのステータスチェックはIPアドレスが出力されない
※User-AgentにELB-HealthCheckerとあるログ
・画像やswfなどクライアントのリクエスト先に付随するファイルにはIPアドレスが出力されない(原因は別にありそう)
・faviconにはIPアドレスが出力される

Comments are closed.