Ubuntu

如何讓 nginx 通過重寫轉發 HTTP POST 請求?

  • April 17, 2020

我的 iOS 應用程序目前正在通過 http POST 訪問域 A,但我想將所有請求轉發到域 B。

如果我使用通常rewrite ^/(.*)$ http://mydomain/$1 permanent;的 POST 數據似乎會失去。

如何使用 NginX 將 HTTP POST 數據傳遞到不同的域?

嘗試使用反向代理支持。一個範例location部分是:

location / {
 proxy_pass      http://localhost:8080;
 proxy_redirect  http://localhost:8080/ /;
 proxy_read_timeout 60s;

 # May not need or want to set Host. Should default to the above hostname.
 proxy_set_header          Host            $host;
 proxy_set_header          X-Real-IP       $remote_addr;
 proxy_set_header          X-Forwarded-For $proxy_add_x_forwarded_for;
}

server這個例子將把對這個塊的所有請求傳遞給在localhost:8080. POST如果它成為一個問題,這將保留’s 並且還應該保留其他請求類型。

問題是外部重定向永遠不會重新發送POST數據。這被寫入HTTP 規範(檢查 3xx 部分)。任何這樣做的客戶都違反了規範。

如果收到 301/302 狀態程式碼以響應 GET 或 HEAD 以外的請求,除非使用者可以確認,否則使用者代理不得自動重定向請求,因為這可能會改變發出請求的條件.

我相當確定大多數瀏覽器通過簡單地強制重定向請求成為請求來實現這一點GET。從理論上講,該規範確實允許瀏覽器詢問使用者是否重定向POST數據,但我不知道目前有什麼。

引用自:https://serverfault.com/questions/312111