
當我在其他一些網路應用程式前面使用nginx作為反向代理時,它似乎不會轉發PUT
請求,而是顯示由nginx(而不是上游伺服器)產生的HTTP 405。
我嘗試了proxy_next_upstream
http_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
}