Verschiedene Felder für proxy_set_header in der Nginx-Konfiguration

10

Ich bin sehr neu in der Nginx-Konfiguration. Ich möchte damit virtuelle Hosts festlegen, damit ich verschiedene Node JS-Apps auf verschiedenen Ports auf demselben Server ausführen kann, diese jedoch auf verschiedenen Subdomänen bereitstellen kann. Nach einigem Suchen habe ich einen Beitrag über Stackoverflow gefunden, der gut für das funktioniert, was ich tun möchte. Der Code umfasste unter anderem den folgenden Standortblock

location / {                                                              │
    proxy_set_header X-Real-IP $remote_addr;                              │
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;          │
    proxy_set_header Host $http_host;                                     │
    proxy_set_header X-NginX-Proxy true;                                  │
                                                                          │
    proxy_pass http://otherapp/;                                          │
    proxy_redirect off;                                                   │
}

Jetzt wollte ich verstehen, was das Skript macht. Ich habe mir Nginx-Dokumente und Notizen angesehen, die von verschiedenen Personen gepostet wurden, und ein paar Dinge verstanden. Es scheint mir, dass das, was ich will, wahrscheinlich auch dann funktionieren wird, wenn ich alle proxy_set_headerZeilen im obigen Code AUSSER entferne proxy_pass. Ich möchte erfahren, was die verschiedenen Felder im obigen Code bewirken. Wahrscheinlich sind sie nützlich für einige Dinge, die ich im Moment nicht realisiere. Gibt es einen Ort, an dem alle Felder für das proxy_set_headerModul aufgelistet und erklärt werden?

Vielen Dank.

user191017
quelle

Antworten:

12

Im Wesentlichen werden Informationen an den Server bereitgestellt, an den der Proxy gesendet wird. In Ordnung:

  1. X-Real-IP- Der Server, auf den Sie einen Proxy übertragen, sieht das Nginx-Proxy-System als "Client-IP" in jeder Art von Anwendungslogik oder Protokollierung, da der Nginx-Dienst die Quelle der TCP-Verbindung ist. Dies ist normalerweise ziemlich wertlos, insbesondere in Protokollen. Der Back-End-Server kann diesen Header anstelle seiner normalen Client-IP für die Protokollierung oder andere Zwecke verwenden, wenn er die IP des Clients benötigt.
  2. X-Forwarded-For- Dies ist ein standardmäßiger Header, der dem ähnelt X-Real-IP, jedoch zusätzliche Verbindungsquelleneinträge für die gesamte Kette von Proxys bereitstellt, durch die die Verbindung geleitet wird. Es kann ein bisschen mehr Kopfschmerzen bereiten, vom Backend-Server aus zu analysieren und damit zu arbeiten, da möglicherweise mehrere Einträge vorhanden sind.
  3. Host- Dies ist diejenige, die für Ihre Anwendung am wahrscheinlichsten ist. Normalerweise enthält die Anforderung, die nginx an den Back-End-Server stellt, in seinem HostHeader die Adresse, die Sie konfiguriert haben (in diesem Fall http://otherapp/). Dies ist wahrscheinlich nicht erwünscht, wenn ein Proxy für etwas ausgeführt wird, das ein namenbasiertes virtuelles Hosting ausführt, oder für etwas, das Links basierend auf dem empfangenen Host-Header generiert. Diese Konfiguration macht es so, dass der HostHeader, den der Client nginx gesendet hat, an das Backend gesendet wird (entspricht dem von Apache ProxyPreserveHost).
  4. X-NginX-Proxy- Dies dient lediglich als Marker für die Verwendung des Proxys. Wahrscheinlich in den meisten Fällen nicht nützlich.
Shane Madden
quelle
Vielen Dank. Gibt es eine Website, die Informationen zu anderen enthält fields? Die Dokumentation auf der Nginx-Site enthält diese Informationen nicht.
user191017
@ user191017 Jeder HTTP-Header (einschließlich der Header, die Sie für Ihre Anwendung erstellen) ist ein faires Spiel - siehe hier .
Shane Madden
@ user191017 Die Nginx-Website enthält auch keine Informationen zum englischen Alphabet. Was Sie fragen, ist eigentlich das Wesentliche des HTTP-Protokolls. Siehe: tools.ietf.org/html/rfc2616
VBart
Nach der Jagd ist dies die erste Beschreibung, die ich für "X-NginX-Proxy" finden konnte - es scheint, dass viele Leute sie verwenden, aber niemand erklärt sie? Gibt es irgendwo offizielle Dokumente?
Eugenevd