如何使用 nginx reverse_proxy 进行 PUT 请求?

如何使用 nginx reverse_proxy 进行 PUT 请求?

当我在其他一些 Web 应用程序前面使用 nginx 作为反向代理时,它似乎没有转发PUT请求,但显示由 nginx(而不是上游服务器)生成的 HTTP 405。

我尝试了proxy_next_upstreamhttp_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
}

相关内容