Miyauchiさんの日記 2003-12-03 - ReverseProxy を使う場合のアクセス解析 で指摘されていますが、 リバースプロキシ(Pound)を使うとバックエンドのApacheのアクセスログに記録される リモートIPがすべてプロキシのIPになってしまうといった問題があります。
実はその通りで、このままだと、Apache側のログで正常なアクセス分析ができないといった問題の他に、 リバースプロキシ経由でアクセスした場合、 リモートIPによるアクセス制限(allow from 192.168.xx.など)が有効にならないといった セキュリティ上の問題も発生します。
このままではまずいので、バックエンドの Apache に mod_rpaf というモジュールをインストールします。
# tar zxvf mod_rpaf-0.4.tar.gz # cd mod_rpaf-0.4 # apxs -i -a -c mod_rpaf.c
設定方法は簡単で、httpd.conf に以下の3行を追加するだけです。
RPAFenable On RPAFsethostname Off RPAFproxy_ips 127.0.0.1
mod_rpaf は、RPAFproxy_ips に書かれているIPアドレスからアクセスがあったときのみ、 リクエストヘッダ中の X-Forwarded-For: に書かれている内容を信用し、 Apache内部の r->connection->remote_ip のアドレスを書き換える といった処理を実行してくれます。 なお、localhost ではなく、別のサーバ上でリバースプロキシを動作させているときは、 RPAFproxy_ips にそのIPアドレスを追加してあげる必要があります。
したがって、リバースプロキシ経由でアクセスした場合の リモートIPによるアクセス制限もばっちり有効になりますし、 アクセスログに記録されるIPも外部のアドレスになります。 しかも、RPAFproxy_ips て指定しているIPアドレス以外のホストから X-Forwarded-Forヘッダを偽装しようとしても、 それができない仕組みになっていますので安心です。
Apacheと同一サーバ上でPoundを運用している場合、 外部からのアクセスログは以下のように変化します。
(使用前) 127.0.0.1 - - [05/Dec/2003:18:17:13 +0900] "GET / HTTP/1.1" 200 7243 127.0.0.1 - - [05/Dec/2003:18:17:46 +0900] "GET / HTTP/1.1" 200 7243 ↓ (使用後) 218.239.251.xx - - [05/Dec/2003:21:08:48 +0900] "GET / HTTP/1.1" 200 7243 203.176.229.xx - - [05/Dec/2003:21:09:23 +0900] "GET / HTTP/1.1" 200 7243
mod_rpaf 便利です。 Apacheのフロントエンドに、 リバースプロキシ(Pound)を導入している方は 是非試しに使ってみてください。
※ ちなみに、現時点で mod_rpaf を Google で検索したら日本語のページ0件、全言語のページ約1,670件でした。 まだ日本ではあまり知られていないのかもしれません・・・