Proxy
請求方法的 Nginx 代理
是否有可能/如何配置 Nginx 位置塊以根據請求方法(即 GET/POST)代理到不同的後端?
原因是,我目前正在處理 2 個不同 URL 的 2 種方法(一個通過 http 代理,另一個通過 fcgi)並試圖使其更加“REST”,因此理想情況下希望獲取資源以返回列表,而 POST 到同一資源應添加到列表中。
我不使用此配置,但基於此處的範例:
location /service { if ($request_method = POST ) { fastcgi_pass 127.0.0.1:1234; } if ($request_method = GET ) { alias /path/to/files; } }
如果您編寫自己的應用程序,您還可以考慮檢查其中的 GET/POST,並發送X-Accel-Redirect標頭以將文件傳輸到 nginx。
儘管您可以使用 來實現這一點
if
,但 Nginx 文件通常不鼓勵這樣做,因為if
它不能很好地與其他指令配合使用。例如,假設 GET 應該對所有人開放,而 POST 僅適用於經過身份驗證的使用者,使用 HTTP Basic Auth。這將需要if
與auth_basic
不能正常工作的 結合使用。這是一個沒有
if
. 訣竅是使用“GET”和“POST”作為上游名稱的一部分,因此可以通過變數替換來解決這些問題:http { upstream other_GET { server ...; } upstream other_POST { server ...; } server { location /service { proxy_pass http://other_$request_method; } } }
要將其與除 GET 之外的所有內容的 HTTP Basic Auth 結合使用,只需添加一個
limit_except
塊:... location /service { proxy_pass http://other_$request_method; limit_except GET { auth_basic ...; } } ...