My Yahoo!に追加 Yahoo!ブックマークに登録

eclipseで作業をしていて、svnで管理しているファイルのファイル名を変更したところ、
commit -m "hogehoge" /hoge/honya.java /hoge/honyarename.java
Deleting       /hoge/honya.java
Adding         /hoge/honayrename.java
svn: Commit failed (details follow):
svn: Commit failed (details follow):
svn: COPY of /hoge/honya.java: 502 Bad Gateway (https://hoge.hoge.jp)
こんな感じのエラーがでて更新できなくなってしまった。

googleでエラーメッセージを検索したところbmoo.netさんの記事によると、どうやらクライアントの問題ではなく、サーバ側で受けたりクエストを別のとこに転送したりすると起きる問題っぽい。

というわけで、もう少し調べると、どうやらうちのsvnサーバのたてかたが原因か??
うちのsvnサーバは
Internet
 | 443(https)
Pound
 | 80(http)
apache(dav_svn)
という構成なんだけど、上に書いたように、Internetからはpoundがhttpsで受け付けて、内部的にはpoundからapacheがhttpで受け付けるようになってます。
こうすると、svn上でファイル名の変更などのような内部的に複数処理を行う操作を実行すると、旧ファイルの削除処理と新ファイルの追加処理を行うときに、

最初の処理はeclipseからのリクエストのhttps
次の処理は擬似的に発行したリクエストはhttp

となるようですね。

なので、一連のトランザクションを違う呼び出しで実行しようとしていると勘違いするっぽい。

と、ここまで分かったけど、さて解決方法は?
とりあえず、man poundしてみると案の定、RewriteDestinationという宛先のリクエストヘッダを書き換えるオプションがあります。
これの説明を読むと、

↓原文
If 1 force Pound to change the Destination: header in  requests.
The  header  is changed to point to the back-end itself with the correct protocol. Default: 0.

↓リーフ訳(間違ってたらごめんなさい)
もし1を選ぶと、poundは強制的にリクエストヘッダの宛先を書き換えます。
poundからバックエンドサーバのプロトコルにヘッダを変えます。
初期値は0
というわけで、pound.cfgのHTTPSセクションに
RewriteDestination 1
を追加。

これで、エラーがでなくなった♪

関連するBlogはこちらからどうぞ〜! → 人気ブログランキングへにほんブログ村 IT技術ブログ Linuxへ