mod_ip_forwarding
うちはZopeをapacheの裏でproxyを使って動かしています。そうするとzopeのログにはproxyサーバ側のIPが残ってしまいます。これは皆さん既知のことで有名だと思います。
さてそれをちゃんと生IPをz2.logに残そうとするとちょっと大変。というかapache2だとこのあたり標準で実装されているらしいのでいまさらのトピックなんだけどCubeDeZopeさんが大変なことになっていてこのあたりの貴重な資料がみることができない!
それではじめて自分の日記に残そうと思いました。
いろいろまえから情報は集めていてmo_ip_forwardingというモジュールを使えばいいということはわかっていました。
http://dev.w3.org/cvsweb//apache-modules/mod_ip_forwarding/
ドキュメント:http://dev.w3.org/cvsweb/apache-modules/mod_ip_forwarding/mod_ip_forwarding.html?rev=1.3
インストールはドキュメントにあるとおり(手抜き)、というか英語苦手きらいなんで誤読している可能性あり。まあとにかくソースからもってきてコンパイルする。
バイナリのapacheを使っている人は後あたりから
The following is a tip contributed by Paul Roe. Thanks!
後あたりから書いてあることを参照してとにかくmod_ip_forwardingモジュールを読ませてあげる。
今回はapacheダブルの構成だった(zopeではないです、すみません)ので前段サーバ、後段サーバ両方にmod_ip_forwardingを組み込ませた。confで
LoadModule w3c_ip_forwarding_module modules/mod_ip_forwarding.so
AddModule mod_ip_forwarding.c
を追加(もしかしたらいらない?)
前段サーバの飛ばしたいVirtualHostの設定項目に
ForwardClientIPAddress On
を追加。
後段サーバ、受け側には
AcceptForwardedClientIPAddress On
AuthorizedProxies xxx.xxx.xxx.xxx (xxxには前段サーバのIP)
こんな感じで両サーバのapacheをリスタートさせてみる。
。。。。まあ、できたかな?。。。。
ちなみに私は結構はまったので備忘録してみました。
zopeとの連携はいずれやってみます。
その後、Zopeへの連携
CubeDeZopeさんのGoogleキャッシュから拾ってきまして
lib/python/ZServer/medusa/http_serever.pyのなか
def log(self,byte)のなか
self.channel.addr[0], を
self.get_header('x_fwd_ip_addr'),
に書き換え。apacheを再起動。
どうやらIPを引き継いできているようです。
おちとしてはログをtailでみていると本来ipがはいるところが"None"と
表示されたりする。????と思ったが考えてみればVirtualHostを
しているサイトの設定にすべて"ForwardClientIPAddress On"しなければ
"None"となってしまう(あたりまえ)。
で、あわててhttpd.confを書き直しました。とさ。
#Clip & Scrapさま書き足しました。