このURLを参照すると、http://localhost:8080/foo/%5B-%5D
サーバー(nc -l 8080
)はそのまま受信します。
GET /foo/%5B-%5D HTTP/1.1
ただし、nginx(1.1.19)を介してこのアプリケーションをプロキシする場合:
location /foo {
proxy_pass http://localhost:8080/foo;
}
nginxポート経由でルーティングされた同じリクエストは、パスがデコードされて転送されます。
GET /foo/[-] HTTP/1.1
GETパス内のデコードされた角括弧は、エスケープされずに到着するため、ターゲットサーバーでエラー(HTTPステータス400-パス内の不正な文字...)を引き起こしています。
URLデコードを無効にする方法、またはエンコードして元に戻す方法はありますか?それにより、ターゲットサーバーがnginx経由でルーティングされたときにまったく同じパスを取得できるようになりますか?巧妙なURL書き換えルール?