Apache でプロキシ経由のリクエストからクライアントの IP アドレスを取得する





Apache でプロキシ経由のリクエストからプロキシを経由してアクセスしてきた
クライアントのIP アドレスを取得する方法は次の通り。

/etc/httpd/conf/httpd.conf を以下のように編集する。

利用するのは LogFormat ディレクティブと CustomLog ディレクティブ。

まずは、LogFormat ディレクティブでログを詳細に取得できるような
エイリアスを作成する。

デフォルトで使用されている combined を基に test という
新しいエイリアスを作成する。

combined に \"%{X-Forwarded-For}i\" を追加している。

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

続いて、CustomLog で access_log に上で定義した test エイリアスを
使用するように設定する。

デフォルトの combined に関する設定をコメントアウトして、
test に関する設定を追加する。

# CustomLog logs/access_log combined
CustomLog logs/access_log test

設定の反映は httpd の再起動。

この設定で次のように access_log にプロキシを経由してアクセスしてきた
クライアントの IP アドレスが記録される。

変更前
1.1.1.4 - - [21/Apr/2009:19:31:52 +0900] "GET / HTTP/1.0" 403 5044 "-" "Mozilla/4.0 
(compatible; MSIE 7.0; Windows NT 5.1)"



変更後
1.1.1.4 - - [21/Apr/2009:19:45:45 +0900] "GET / HTTP/1.0" 403 5044 "-" "Mozilla/4.0 
(compatible; MSIE 7.0; Windows NT 5.1)" "1.1.1.3"