禁用nginx代理中的URL解码

当我浏览到此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端口路由相同的请求被转发path解码:

 GET /foo/[-] HTTP/1.1 

GETpath中的解码方括号导致目标服务器( HTTP状态400 – path中的非法字符… )中的错误在到达时未被转义。

有没有办法禁用URL解码或编码回来,以便目标服务器通过nginx路由时获得完全相同的path? 一些聪明的URL重写规则?

引用瓦伦丁·巴泰涅夫 (谁应该得到这个答案的全部功劳):

来自文档的引用:

  • 如果proxy_pass是通过URI指定的,则在将请求传递给服务器时,与该位置匹配的规范化请求URI的一部分被指令中指定的URIreplace

  • 如果在没有URI的情况下指定proxy_pass则请求URI将以与处理原始请求时由客户端发送的相同的forms传递给服务器

你的情况下正确的configuration是:

 location /foo { proxy_pass http://localhost:8080; }