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上で表現可能なので、もともと問題が顕在化しません。