如何使用nginx的reverse_proxy進行PUT請求?

如何使用nginx的reverse_proxy進行PUT請求?

當我在其他一些網路應用程式前面使用nginx作為反向代理時,它似乎不會轉發PUT請求,而是顯示由nginx(而不是上游伺服器)產生的HTTP 405。

我嘗試了proxy_next_upstreamhttp_405的方法,但沒有成功。我想知道為什麼 nginx 本身會檢查 HTTP 方法來尋找配置了反向代理的位置區塊。

答案1

Nginx 不是這裡的問題。如果與請求匹配,它會PUT按預期轉發反向代理區塊中的請求。location

我有另一個location指令,它確保圖像不透過反向代理提供。它.png最終匹配了所有內容(以及一些其他檔案副檔名),也匹配了上傳網址。

對於錯誤的位置區塊,錯誤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
}

相關內容