SSLアクセラレータ/リバースプロキシ配下でのwebdav


subversionhttpsリポジトリでmove出来ないよ、と言われた。で、原因はSSLアクセラレータ配下にいてたhttpで応答してるwebdavだったらしい。
clientがLB/リバースプロキシサーバにhttpswebdavで接続すると、リクエストヘッダのDestinationヘッダに https://example.com/hogehoge/という絶対URLを送信する。しかし、LB/リバースプロキシサーバはhttpsを復号して、バックエンドのwebdavサーバにリクエストを投げる。ここでバックエンドのhttpなwebdavサーバはhttpsが解釈できない?から502 Bad Gatewayを返している模様。

というわけでmod_headersのearlyモードを使って、リクエストヘッダ中のDestinationの値を書き換える。(httpsの文字列をhttpに)

RequestHeader edit Destination ^https http early

mod_headersのearlyモード

early ディレクティブではリクエストパスの設定が解決される前に 処理されるので、メインサーバかバーチャルホストコンテキストでのみ、 早期ヘッダをセットできます。early ディレクティブはリクエストパスに 依存することはできませんので、 といったコンテキスト内では使用 できません。

関係ないけど、apacheの日本語版のmod_headersマニュアルにはeditの項目が反映されてないのなー。