Apacheのアクセスログ (リバースプロキシの先)

外部からの閲覧状態を解析したい

職場で立ち上げているWebサーバがあります。
それのアクセスログ解析をしたところ、内部IPしか出てない。
それもそのはず。リバースプロキシを通しているので、その先はログに残っていない。

リバースプロキシの設定にも依るそうだが、Webサーバ側で外部IPを取ることが出来るらしい。
職場のリバースプロキシがPoundなのかsquidなのかも知りませんが、(^^ゞ
駄目もとでやってみる。

参考にしたのは以下の記事。

  • ryose_srvのブログ

http://blog.livedoor.jp/ryose_srv/archives/1080732.html

Poundを利用すると、クライアントから送られてくるHTTP「リクエスト」ヘッダに、X-Forward-Forフィールドが追加されて、Webサーバに送信されます。Apacheの場合だと、ログフォーマットを変更する事でクライアントのIPを記録する事が可能になります。

ということらしいです。
つまり、ApacheのX-Forwarded-Forの内容を記録すれば、サーバ側のログでもクライアントIPアドレスが取れる。

SuSE11.1では、httpd.confのincludeである/etc/apache2/mod_log_config.confにLofFormatの記載があるので、そこを変更する。

#LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common

この書式の意味は、LogFormat "フォーマット" ログフォーマット名
ということです。上記の例では、ログフォーマット名はcommonです。このほかに、vhost_common, referer,agent, combined, combinedio, ssl_common, ssl_combinedなどがある。

次にこのログフォーマット名を、ログファイルに関連づけている箇所を探す。
例えばこんな感じ。

# grep -n combined /etc/apache2/*
httpd_site.conf:26:CustomLog /var/log/apache2/access.log combined env=!nolog

つまり、access.logはeombinedの書式を使って書き出されているということだ。
だから、LogFormatのcombinedの定義を、X-Forwarded-Forに書きなおさなければならない。

Apache再起動して様子を見る。

参考は、AdminWebのページです。
http://www.adminweb.jp/apache/log/index2.html