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.confLogFormat を以下のように変更し、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ヘッダ には気をつけなくてはいけない箇所も多くありますが、このやり方での対処にも一定の有効性はあるかと考えます。
アクセスログに限らず、あらゆるログデータはトラブル時には重要な手がかりとなるものです。
いざという時に困らないよう、セットアップ時点で適切なロギングを心がけたいですね(自己への戒め含め)

アガルートITパートナーズ(AITP)では、メンバーを大募集中です

詳しくは募集要項ページをご覧ください!

関連するタグ