Diese Seite übersetzen

Express hinter Proxies

Wenn Sie eine Express-App hinter einem Reverse Proxy ausführen, können einige der Express-APIs andere Werte als erwartet zurückgeben. Um dies anzupassen die Einstellung trust proxy kann verwendet werden, um Informationen auszublenden, die vom Reverse Proxy in den Express API bereitgestellt werden. Das häufigste Problem sind Express-APIs, die die IP-Adresse des Clients offenlegen, statt dessen eine interne IP-Adresse des Reverse Proxy anzeigen.

Note

Bei der Konfiguration der trust proxy Einstellung ist es wichtig, das genaue Setup des Reverse Proxy zu verstehen. Da diese Einstellung den in der Anfrage angegebenen Werten vertrauen wird Es ist wichtig, dass die Kombination der Einstellung in Express mit der Funktionsweise des Reverse Proxy übereinstimmt.

Die Anwendungseinstellung trust proxy kann auf einen der in der folgenden Tabelle aufgelisteten Werte gesetzt werden.

TypWert
Boolean

Wenn true, wird die IP-Adresse des Clients als linker Eintrag im X-Forwarded-For Header verstanden.

Falls „falsch“ die App als direkt gegenüber dem Client verstanden wird und die IP-Adresse des Clients von „req.socket.remoteAddress“ abgeleitet wird. Dies ist die Standardeinstellung.

Wenn Sie auf true setzen, ist es wichtig sicherzustellen, dass der letzte Reverse Proxy alle folgenden HTTP-Header löscht/überschreibt: X-Forwarded-For, X-Forwarded-Host und X-Forwarded-Proto, andernfalls ist es möglich, dass der Client irgendeinen Wert angibt.

IP-Adressen

Eine IP-Adresse, ein Subnetz oder ein Array von IP-Adressen und Subnetzen, die darauf vertrauen, dass es sich um einen Reverse Proxy handelt. Die folgende Liste zeigt die vorkonfigurierten Subnetznamen an:

  • loopback - 127.0.0.1/8, ::1/128
  • linklocal - 169.254.0.0/16, fe80::/10
  • uniquelocal - 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7

Sie können IP-Adressen auf jede der folgenden Arten festlegen:

app.set('trust proxy', 'loopback'); // specify a single subnet
app.set('trust proxy', 'loopback, 123.123.123.123'); // specify a subnet and an address
app.set('trust proxy', 'loopback, linklocal, uniquelocal'); // specify multiple subnets as CSV
app.set('trust proxy', ['loopback', 'linklocal', 'uniquelocal']); // specify multiple subnets as an array

Wenn angegeben, werden die IP-Adressen oder Subnetze vom Prozess der Adressermittlung ausgeschlossen und die dem Anwendungsserver nächstgelegene nicht vertrauenswürdige IP-Adresse wird als IP-Adresse des Clients ermittelt. Dies funktioniert indem überprüft wird, ob req.socket.remoteAddress vertrauenswürdig ist. Wenn ja, dann wird jede Adresse in X-Forwarded-For von rechts nach links bis zur ersten Adresse überprüft, die nicht vertrauenswürdig ist.

Nummer

Benutzen Sie die Adresse, die höchstens n von der Express-Anwendung entfernt ist. req.socket.remoteAddress ist der erste Hop, und der Rest wird im X-Forwarded-For Header von rechts nach links gesucht. Ein Wert von 0 bedeutet, dass die erste nicht vertrauenswürdige Adresse req.socket.remoteAddress ist, d.h. es gibt keinen Reverse-Proxy.

Bei der Verwendung dieser Einstellung ist es wichtig sicherzustellen, dass es keine Multiple gibt, verschiedene Pfade zur Express-Anwendung, so dass der Client kleiner sein kann als die konfigurierte Anzahl von Hops, die entfernt sind andernfalls kann es möglich sein, dass der Kunde irgendeinen Wert angibt.

Funktion

Benutzerdefinierte Vertrauens-Implementierung.

app.set('trust proxy', (ip) => {
if (ip === '127.0.0.1' || ip === '123.123.123.123')
return true; // trusted IPs
else return false;
});

Das Aktivieren von trust proxy hat folgende Auswirkungen:

  • Der Wert von req.hostname wird vom Wert abgeleitet, der im X-Forwarded-Host Header gesetzt wurde , die vom Client oder vom Proxy gesetzt werden kann.

  • X-Forwarded-Proto kann vom Reverse Proxy gesetzt werden, um der App mitzuteilen, ob es https oder http oder sogar ein ungültiger Name ist. Dieser Wert wird von [req.protocol]reflektiert (/en/api#req.protocol).

  • Die Werte req.ip und req.ips werden auf der Basis der Socket-Adresse und des X-Forwarded-For Headers gefüllt beginnend an der ersten nicht vertrauenswürdigen Adresse.

Die trust proxy Einstellung ist mit dem proxy-addr Paket implementiert. Weitere Informationen finden Sie in der Dokumentation.