現在、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
で実行されている2番目のサーバーに渡します。これにより、POST
が保持され、問題が発生した場合に他のリクエストタイプも保持されます。
問題は、外部リダイレクトが決してPOST
データを再送信しないことです。これは HTTP仕様 に書き込まれます(3xxセクションを確認してください)。これを行うクライアントは仕様に違反しています。
GETまたはHEAD以外のリクエストに応答して301/302ステータスコードを受信した場合、ユーザーエージェントは、ユーザーが確認できない限り、リクエストを自動的にリダイレクトしてはなりません。これにより、リクエストが発行された条件が変わる可能性があるためです。 。
ほとんどのブラウザは、リダイレクトされたリクエストをGET
リクエストにするだけでこれを実装していると確信しています。理論的には、仕様はPOST
データをリダイレクトするかどうかをユーザーに尋ねるブラウザーを許可しますが、現在はそうすることはありません。