こんにちはデース。
さて、以前Twitterで以下のようなつぶやきをしました。※どうやらバッチリ誤字してるようですね☆
こんなん
RackspaceのCloud Load Balancersを使用する場合、いわゆるリバースプロキシ型のロードバランサと同じように、分散先のサーバにはロードバランサのIPがアクセス元となります。
すると、本来のアクセス元IPが分からなくなってしまうのですが、リンクの記事によるとCloud Load BalancersもHTTPのX-Forwarded-Forヘッダに対応しており、こちらを取得する事でアクセス元IPを取得出来ます。
気がむいたのでApacheとnginxを使って動作確認をしてみました。
テスト環境は以下の通りです。
- OS:CentOS5.6(Cloud Serversのimageから起動したもの)
- Apache:CentOS標準のものを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"
ログのフォーマットはデフォルトのままで分かりずらいですが、そこはご愛嬌という事で。