回答:
代わりにリバースプロキシサポートを使用してみてください。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
ブロックへのすべてのリクエストを、で実行されている2番目のサーバーに渡しますlocalhost:8080
。これはを保持しPOST
、問題になる場合は他のリクエストタイプも保持する必要があります。
問題は、外部リダイレクトがデータを再送信しないことPOST
です。これはHTTP仕様に記述されています(3xxセクションを確認してください)。これを行うクライアントは、仕様に違反しています。
GETまたはHEAD以外のリクエストに応じて301/302ステータスコードを受信した場合、ユーザーが確認できない限り、ユーザーエージェントはリクエストを自動的にリダイレクトしてはなりません。リクエストが発行された条件を変更する可能性があるためです。
ほとんどのブラウザは、リダイレクトされたリクエストを単にリクエストにすることでこれを実装していると確信していますGET
。理論的には、この仕様では、ユーザーにPOST
データをリダイレクトするかどうかを尋ねるブラウザーを許可していますが、現在行っているものは知りません。
proxy_set_header
値を設定しますか?それ以外の場合、リモートアドレスはプロキシサーバーのリモートアドレスになると思いますが、通常はクライアントのリモートアドレスが必要です。
proxy_redirect
は2つの引数を取ります。:ドキュメントを参照してくださいnginx.org/en/docs/http/...