When I browse to this URL: http://localhost:8080/foo/%5B-%5D
server (nc -l 8080
) receives it as-is:
GET /foo/%5B-%5D HTTP/1.1
However when I proxy this application via nginx (1.1.19):
location /foo {
proxy_pass http://localhost:8080/foo;
}
The same request routed through nginx port is forwarded with path decoded:
GET /foo/[-] HTTP/1.1
Decoded square brackets in the GET path are causing the errors in the target server (HTTP Status 400 - Illegal character in path...) as they arrive un-escaped.
Is there a way to disable URL decoding or encode it back so that the target server gets the exact same path when routed through nginx? Some clever URL rewrite rule?