Den „Host“-Header ändern oder stattdessen „X-Forwarded-Host“ übergeben, wenn Nginx als Reverse-Proxy verwendet wird?

Den „Host“-Header ändern oder stattdessen „X-Forwarded-Host“ übergeben, wenn Nginx als Reverse-Proxy verwendet wird?

Ich versuche, Nginx als Reverse-Proxy zu verwenden und der Upstream-Server ist eine ASP.NET Core-Anwendung, bei der ich dieForwardedHeadersMiddlewareX-Forwarded-*, das drei verschiedene Header liest :

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

Die ersten beiden verstehe ich, aber das letzte ( X-Forwarded-Host) finde ich verwirrend. Ich habe gesehen, dass Nginx-Reverse-Proxy-Konfigurationen den HostHeader normalerweise folgendermaßen umschreiben:

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

Ich habe aber auch gesehen, dass X-Forwarded-Hoststattdessen Folgendes verwendet wird:

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

In manchen Fällen werden beide gleichzeitig verwendet:

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

Ich bin mir nicht sicher, was ich tun soll. Warum sollte man beides gleichzeitig verwenden? Und warum sollte jemand den X-Forwarded-HostHeader verwenden, wenn er den HostHeader einfach direkt ändern kann? Mir ist aufgefallen, dass das Ergebnis in meiner ASP.NET Core-App dasselbe ist, unabhängig davon, ob ich Hostoder X-Forwarded-Host(oder beides) einstelle. In beiden FällenHttpContext.Request.Hostwird auf den erwarteten Wert gesetzt – vorausgesetzt natürlich, dass die Middleware für weitergeleitete Header registriert ist.

Zu meiner Überraschung konnte ich beim Googeln keine relevanten Informationen zu diesem Thema finden, also musste ich hier fragen. Was ist in dieser Situation der richtige Ansatz?

verwandte Informationen