ELB経由の接続元IPをApacheのアクセスログに出力してみた

こんにちは!Tamaです!

通常Apacheの入ったWebサーバーにHTTPアクセスするとApacheのアクセスログに接続元IPが記録されます。

しかしELB経由で接続した場合アクセスログにはELBのIPが出力されると思います。

001
ELBの特性上IPアドレスがコロコロ変わる。

今回はELBを経由した通信の接続元IPをApacheのコンフィグファイルを編集することでアクセスログに出力してみます。

httpd.confの編集

/etc/httpd/conf/httpd.confを編集します。

「LogFormat」で始まるログのフォーマットを設定している部分があるかと思います。

1494 #2495 # The following directives define some format nicknames for use with3496 # a CustomLog directive (see below).4497 #5498 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined64997500 LogFormat "%h %l %u %t \"%r\" %>s %b" common8501 LogFormat "%{Referer}i -> %U" referer9502 LogFormat "%{User-agent}i" agent10503

標準でアクセスログに出力されるcombinedに「X-Forwarded-For」ヘッダを追記し書き換えます。

今回は以下の様に先頭に記述しました。

※アクセスログとして出力されるフォーマットは「CustomLog」で確認できます。

1LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

「X-Forwarded-For」はロードバランサーなどを介した場合に付与されるhttpヘッダの1つで接続元IPを示しています。

他にもプロトコル(HTTP/HTTPS)を識別するX-Forwarded-Proto

接続元ポートを識別するX-Forwarded-Port

ヘッダがあります。

confファイルを変更した後は設定ファイルの再読み込みを行います。

1/etc/init.d/httpd reload

設定できているかアクセスログを確認してみましょう。

[接続元IP] [ELBのIP] ~

のように出力されているかと思います。

今回は以上になります!

お疲れさまでした!

他にもApacheのモジュールを入れるなどの方法がありますがconfファイルを編集するのが一番簡単で手っ取り早いのではないかと個人的には思います。

またお会いしましょう!

【12月4日(金)15:00~】【AWS AI/MLオンラインセミナー】ABEJA様/ブレインズテクノロジー様/dotData Japan様との共同登壇!視聴無料!まだ申し込み可能です。

[申し込みはこちら](https://www.knowledgecommunication.jp/news/219.html)

この記事を書いた人

aws-recipe-user