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?
Best Answer
Quoting Valentin V. Bartenev (who should get the full credit for this answer):