NginxでHTTPSを終端させて、裏のSubversionにリバースプロキシしていた時、一見うまくいったように見えたけど、日本語ファイル名をsvn moveしたら失敗していたのをFixしたのでメモ。
TL;DR
タイトルのケースの場合、 Apacheに渡される Destination ヘッダが https:// で始まってしまうのを http:// で始まるように修正すれば直ると言われていますが、それをするはずの巷の $fixed_destination 対処 は $1 部分がURLエンコードされていようが、Nginxが更にURLエンコードしてしまう問題(%XX => %25XX)が出る可能性があります。(nginx:1.13.3 で確認済)
エンコードされていない $1 は、 <?var> 形式の名前付きキャプチャ機能を使えば取得することができます。
set $fixed_destination $http_destination;
if ( $fixed_destination ~ ^https(?<myurl>.*)$ ) {
set $fixed_destination "http$myurl";
}
proxy_set_header Destination $fixed_destination;
上記を使えば日本語ファイル名の移動でも問題になりません。
英語のファイル名の場合はURLエンコードされずにURL上で表現可能なので、もともと問題が顕在化しません。