okochangの馬鹿でありがとう

ふらふら適当に世間を生きる日々でございます

Cloud Load Balancers使用時にアクセス元IPをログ出力するテスト

こんにちはデース。
さて、以前Twitterで以下のようなつぶやきをしました。
※どうやらバッチリ誤字してるようですね☆
こんなんRackspaceのCloud Load Balancersを使用する場合、いわゆるリバースプロキシ型のロードバランサと同じように、分散先のサーバにはロードバランサのIPがアクセス元となります。
すると、本来のアクセス元IPが分からなくなってしまうのですが、リンクの記事によるとCloud Load BalancersもHTTPのX-Forwarded-Forヘッダに対応しており、こちらを取得する事でアクセス元IPを取得出来ます。
気がむいたのでApacheとnginxを使って動作確認をしてみました。 テスト環境は以下の通りです。

  • OS:CentOS5.6(Cloud Serversのimageから起動したもの)
  • ApacheCentOS標準のものをyumでインストール
  • nginx:EPELをリポジトリに追加してyumでインストール

ApacheはデフォルトだとX-Forwarded-Forヘッダをログに出力する設定にはなっていないので、以下のように設定ファイルを修正しました。

# vi /etc/httpd/conf/httpd.conf
    485 #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    486 LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

nginxは以下のようにデフォルトでログに出力する設定になっています。

# vi /etc/nginx/nginx.conf
     51     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
     52                       '$status $body_bytes_sent "$http_referer" '
     53                       '"$http_user_agent" "$http_x_forwarded_for"';

以下の通り無事に確認出来ました。(アクセス元IP=>221.221.221.221 CloudLoadBalancerのIP=>10.183.252.25)
※アクセス元IPは適当な数字に置換しています

Apacheでの確認

CloudServersに直接アクセスした場合
# tail -f /var/log/httpd/access_log 
- 221.221.221.221 - - [01/Oct/2011:03:06:39 +0000] "GET / HTTP/1.1" 200 35 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3"

CloudLoadBalancers経由でアクセスした場合
# tail -f /var/log/httpd/access_log 
221.221.221.221 10.183.252.25 - - [01/Oct/2011:03:08:53 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3"

■nginxでの確認

CloudServersに直接アクセスした場合
# tail -f /var/log/nginx/access.log
221.221.221.221 - - [01/Oct/2011:03:18:07 +0000] "GET / HTTP/1.1" 200 36 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3" "-"

CloudLoadBalancers経由でアクセスした場合
# tail -f /var/log/nginx/access.log
10.183.252.25 - - [01/Oct/2011:03:19:52 +0000] "GET / HTTP/1.1" 200 36 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3" "221.221.221.221"

ログのフォーマットはデフォルトのままで分かりずらいですが、そこはご愛嬌という事で。