当我在其他一些 Web 应用程序前面使用 nginx 作为反向代理时,它似乎没有转发PUT
请求,但显示由 nginx(而不是上游服务器)生成的 HTTP 405。
我尝试了proxy_next_upstream
http_405 的方法,但没有奏效。我想知道为什么 nginx 本身会检查已配置 reverse_proxy 的位置块的 HTTP 方法。
答案1
Nginx 不是这里的问题。如果匹配请求PUT
,它会按预期在反向代理块中转发请求。location
我还有另一location
条指令,确保图像不通过反向代理提供。它.png
最终匹配了所有内容(以及一些其他文件扩展名),也匹配了 upload-urls。
对于错误的位置块,错误 405 是正确的。解决方案是确保上传请求确实转发到反向代理中。
有效反向代理配置的示例:
# proxy requests for /upload the a webapp, which implements PUT
location ^~ /upload {
proxy_pass "https://backendserver:1234/something";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
tcp_nodelay on;
}
如果没有其他优先的位置块,则配置工作正常。
我的问题是另一个块:
# This block matched requests for /upload/somefile.png before the proxy block
location ~* ^(/.*png|/.*jpg|/.*jpeg|/.*gif)$ {
# some directives without proxy_pass
}