ELB配下Webサーバーのアクセスログにアクセス元IPを残す方法
はじめに
AITPのIMIです。
以下の2記事に続き、今回もロードバランサー関係の内容になります。
今回はロードバランサー配下のWebサーバーのアクセスログについて、ちょっとしたポイントを記載したいと思います。
実例と対策
クローラーのような外部Botがサイトを参照しに来た結果、
サイト負荷が高まってしまうようなケースは良くある事例で、私も何度も体験があります。
その対策としてはいくつか考えられるものがありますが、手っ取り早いのがIPによる制限です。
タイトルであえて書いている通り、ロードバランサー(ELB)配下ではアクセス元IP(グローバルIP)が標準では出力されません。
ロードバランサーからWebサーバーにアクセスが転送されていることに依るのですが、
Webサーバーから見た場合のアクセス元はロードバランサーとなり、ログに残るIPも自然とロードバランサーのIPとなってしまう訳です。
設定方法(Apacheの場合)
Webサーバーのアクセスログにアクセス元IP(グローバルIP)を残すようにするには、confファイルに2点ほど変更・追加が必要です。
1. ProxyAddHeaders
Apacheの ProxyAddHeaders
を有効にする必要があります。
これを有効にすることで、転送元のIPが格納されている X-Forwarded-Forヘッダ
が参照できるようになります。
※X-Forwarded-Forヘッダを有効にする方法と注意点については、冒頭でも記載した ELB配下のWebサイト(WordPress)でIP制限を掛ける をご参考下さい。
2. LogFormat
肝心の access_log
の設定箇所と記述ですが、httpd.conf
の LogFormat
を以下のように変更し、X-Forwarded-Forヘッダを出力する事でアクセス元IPを残す事が可能です。
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
まとめ
リンク先にも記載した通り、X-Forwarded-Forヘッダ には気をつけなくてはいけない箇所も多くありますが、このやり方での対処にも一定の有効性はあるかと考えます。
アクセスログに限らず、あらゆるログデータはトラブル時には重要な手がかりとなるものです。
いざという時に困らないよう、セットアップ時点で適切なロギングを心がけたいですね(自己への戒め含め)