#ロードバランサー配下にあるWebサーバーのログ
ロードバランサーを経由してWebサーバーにアクセスする場合、アクセス元のIPアドレスとしてロードバランサーのIPアドレスがログに記録されます。
これはWebサーバーから見れば、ロードバランサーがクライアントとして見えるためです。
#ロードバランサーによっては、設定次第でオリジナルのアクセス元IPを維持するものもあります
#アクセス元IPをログに残したい
しかし、アクセス元IPをログに残しておかないと、アクセス解析やトラブルシューティングに支障をきたすことになります。
そこで、今どきのロードバランサーはhttp/httpsアクセスであれば、httpヘッダーにX-Forwarded-Forヘッダーを追加してその値にアクセス元オリジナルのIPアドレスを設定することで、Webサーバーに知らせる方法を採っています。
そうすれば、Webサーバー側はX-Forwarded-Forヘッダーに設定されているIPアドレスをログに書き込むようにすれば良いわけです。
#実際の設定(Apache 2.4の場合)
Apache2.2でも設定は可能なのですが、面倒なのでここでは割愛。
前提条件としてVirtualHostディレクティブかグローバルディレクティブ内に記述する必要があります。
httpd.confに書いておくのが無難でしょう。
RemoteIPHeader X-Forwarded-For
この一文を書いておくだけで、アクセス元のIPアドレスをWebサーバー(Apache)は知ることとなるので、次にログフォーマットを設定します。
- 変更前
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
- 変更後
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
先頭部分の%hを%aとすることで、アクセス元のIPアドレスがログに記録されます。
また、IPアドレスによるアクセス制御にも、アクセス元IPを使用することができるようになります。
AWS ELBは当然ながらX-Forwarded-Forヘッダーに対応しているので、ELBを利用する場合は必ず設定しておきたいものです。