2012年1月23日月曜日

リバースプロキシとSubversion

Apacheのリバースプロキシ越しにSubversionサーバを立てていたら svn mv や svn cp (それをバックグラウンドで行う svn merge も)ができなくてハマったので解決策のメモ。

  • クライアント→リバースプロキシ(ゲートウェイ)間はHTTPS
  • リバースプロキシ→Subversionサーバ間はHTTP
  • svn cpの際に使われるHTTPのCOPYアクションで、Destinationリクエストヘッダに https:// スキームのフルパスが記述される
  • SubversionサーバはHTTP設定なので https:// スキームを解釈しない(WebDAVサーバは、、というのが正しいかも)

ということのようです。 参考ブログ記事

リバースプロキシのApacheに mod_headers を追加インストールして RequestHeader ディレクティブを追加するだけ、、なんですがちょっとしたワナが。
リバースプロキシのApacheが古くて mod_headers に edit コマンドがないのです。ぐぬぬ。
新しいApacheをインストールし直せばいいんですが、PHP(これも古い)やらmod_pythonやらがつながっていて単純にApacheだけバージョンアップしてよいものか難しいところ…

⇒ そこで mod_headers だけ最新のものを使うようにしました。
apxsを使って現行Apacheのモジュールとしてビルドするので、新しいApache固有のAPIを使っていたりしたらビルド時にコケるはず。
というわけで

bunzip2 -c httpd-2.2.21.tar.bz2 | tar xf -
cp httpd-2.2.21/modules/metadata/mod_headers.c .
/usr/local/apache2/bin/apxs -i -c -a mod_headers.c
みたいな感じで。
あとは各ブログの記事にならって httpd.conf(からincludeされる設定ファイル)に
RequestHeader edit Destination ^https http early
と書けばOKでした。
(Destinationリクエストヘッダの書き換え。先頭の https を http にする)

0 件のコメント:

コメントを投稿