Nginx
在 nginx 代理中禁用 URL 解碼
當我瀏覽到這個 URL 時:
http://localhost:8080/foo/%5B-%5D
server (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 重寫規則?
引用Valentin V. Bartenev(誰應該得到這個答案的全部功勞):
來自文件的引用:
> > * 如果使用 URI指定 proxy_pass ,則在將請求傳遞給伺服器時,與位置匹配的規範化請求 URI 的一部分將替換為指令中指定的 URI > * 如果
proxy_pass
未指定URI,則請求 URI 以與客戶端在處理原始請求時發送的相同格式傳遞給伺服器 > > >在您的情況下,正確的配置是:
location /foo { proxy_pass http://localhost:8080; }