Nginx をリバース プロキシとして使用する場合は、`Host` ヘッダーを変更するか、代わりに `X-Forwarded-Host` を渡しますか?

Nginx をリバース プロキシとして使用する場合は、`Host` ヘッダーを変更するか、代わりに `X-Forwarded-Host` を渡しますか?

私はNginxをリバースプロキシとして使用しようとしており、上流サーバーはASP.NET Coreアプリケーションであり、ForwardedHeadersMiddleware、3 つの異なるヘッダーを読み取りますX-Forwarded-*

  • X-Forwarded-For
  • X-Forwarded-Proto
  • X-Forwarded-Host

最初の 2 つは理解できましたが、最後の 1 つ ( ) はわかりにくいと思います。Nginx リバース プロキシ構成では、通常、ヘッダーが次のようにX-Forwarded-Host書き換えられるのを見てきました。Host

location / {
    proxy_pass http://app;
    proxy_set_header Host $host;
}

しかし、代わりに が使用されているのも見ましたX-Forwarded-Host:

location / {
    proxy_pass http://app;
    proxy_set_header X-Forwarded-Host $host;
}

場合によっては、両方が同時に使用されます。

location / {
    proxy_pass http://app;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
}

何をすべきかわかりません。なぜ両方を同時に使用するのでしょうか?また、ヘッダーを直接X-Forwarded-Host変更できるのであれば、なぜヘッダーを使用するのでしょうか?ASP.NET Coreアプリでは、または(または両方)を設定したかどうかに関係なく、どちらの場合でもHost結果は同じであることに気づきました。HostX-Forwarded-HostHttpContext.Request.Hostもちろん、転送されたヘッダー ミドルウェアが登録されている場合は、期待される値に設定されます。

驚いたことに、この問題に関してグーグルで検索しても関連情報が見つからなかったので、ここで質問せざるを得ませんでした。このような状況では、どのようなアプローチが適切でしょうか?

関連情報