2007-07-29のReverseProxyのもろもろの補足

前回の記事の修正なんかを。
Subversionサーバ上でDestinationヘッダを書き換えていたのだが、ReverseProxyサーバ上で行うほうがいいと思った。
理由はSubversionサーバ上でDestinationヘッダの書き換えてしまうと、直接Subversionサーバにhttpsでアクセスしようと思っても、Destinationヘッダ内がhttpに書き換えられるので、MOVEやCOPYで502になってしまう。
ReverseProxyサーバ上でDestinationヘッダの書き換えを行えば、上記のようなことは起きない。
どうやればいいかというとCentOS5の場合は前回同様mod_headers.soを無理やり2.2.4にバージョンアップする。
そして、ReverseProxyサーバの/etc/httpd/conf.d/ssl.confを

・・・

・・・

ProxyRequests Off

Order deny,allow
Allow from all


RequestHeader edit Destination ^https http
ProxyPass http://svn-host/svn/
ProxyReverse http://svn-host/svn/

・・・

・・

のようにProxyの設定を追加すればいい。
Subversionサーバの設定はReverseProxy用の設定はせずに、普通どおりに行う(ただし、リポジトリパスをsvnにしているので、違う場合は変更すべし)。
これでhttps→httpができ、http→httpも問題なくでき、Subversionサーバに直接アクセスしてもエラーを起こさない。
また、既定の番号以外にポートフォワードしたい、例えば443→8080に送りたい場合は、上記のRequestHeader〜を

RequestHeader edit Destination ^https://(host-name)/(svn*) http://$1:8080/$2

ように書けばいい。
host-nameはReverseProxyサーバ名で、例えばsever.example.comなら

RequestHeader edit Destination ^https://(server\.example\.com)/(svn*) http://$1:8080/$2

書き方はmod_rewriteと同じなので、そちらを参考にしてほしい。
ちなみに、2.2.4のmod_headersで新しく追加されたeditはApacheの公式サイトの日本語版にはなくて、英語版にちょろっと説明がある。
ともあれ、この方法は他にも流用できそうで、柔軟にサーバ運営ができそうだ。



話を少し変えて、この502エラーになる問題は、Subversionだけに限った話ではなく、WebDAV全般に言える。
ReverseProxy経由でWebDAVhttps→httpのようにポートフォーワードする環境でMOVEやCOPYを送ると、502になっちゃう。
仕様をよく理解していれば当たり前といえば、当たり前かな。