Ich versuche, Nginx als Reverse-Proxy zu verwenden und der Upstream-Server ist eine ASP.NET Core-Anwendung, bei der ich dieForwardedHeadersMiddleware
X-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 Host
Header normalerweise folgendermaßen umschreiben:
location / {
proxy_pass http://app;
proxy_set_header Host $host;
}
Ich habe aber auch gesehen, dass X-Forwarded-Host
stattdessen 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-Host
Header verwenden, wenn er den Host
Header einfach direkt ändern kann? Mir ist aufgefallen, dass das Ergebnis in meiner ASP.NET Core-App dasselbe ist, unabhängig davon, ob ich Host
oder X-Forwarded-Host
(oder beides) einstelle. In beiden FällenHttpContext.Request.Host
wird 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?