In meiner Umgebung werden Benutzeranforderungen über eine Reihe von Systemen gesendet:
[Client] -> [ELB] ---> [nginx] -> [web]
(ELB = AWS Elastic Load Balancer)
Dank dieser Antwort kann nginx die richtige Client-IP-Adresse ermitteln und an die Upstream-Server (Web) mit den Headern X-Forwarded-For
und übergeben X-Real_IP
. Die relevante Nginx-Konfiguration:
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
real_ip_recursive on;
proxy_set_header X-Real-IP $remote_addr;
Mein Problem ist folgende, der Real IP - Modul in nginx ersetzt die bestehenden , $remote_addr
mit dem Ergebnis seiner variablen X-Forwarded-For
Berechnung. Dies gibt mir die ursprüngliche Client-IP, aber ich verliere die IP-Adresse des Systems, das die Anforderung tatsächlich an den Proxy (dh die ELB) gesendet hat.
Insgesamt ist es mir wichtiger, die Client-IP zu haben, aber ich möchte in der Lage sein, die gesamte Kette von Anforderungen zu protokollieren, damit ich verstehen (und debuggen) kann, wie der Datenverkehr fließt. Derzeit kann ich nur die Client-IP, die eigene IP und die Upstream-Server-IP von nginx protokollieren lassen. Ich möchte auch die ELB-IP protokollieren können.
Ich sehe, dass X-Istence 2013 mit wenig Glück dieselbe Frage gestellt hat. Hat sich seitdem etwas geändert oder verbessert?
quelle
$realip_remote_addr
. Es funktioniert wunderbar. Versuchte tatsächlich, proxy_protocol zum Laufen zu bringen und stieß auf die Nginx-