So protokollieren Sie den ursprünglichen Wert von $ remote_addr bei Verwendung von Real-IP

9

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-Forund ü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_addrmit dem Ergebnis seiner variablen X-Forwarded-ForBerechnung. 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?

Michaelg
quelle

Antworten:

8

Sie können die ursprüngliche Clientadresse der verbindenden ELB in der Variablen$realip_remote_addr abrufen. Beachten Sie jedoch, dass diese Variable nur in Nginx 1.9.7 hinzugefügt wurde. Daher müssen Sie eine sehr aktuelle Version von Nginx ausführen.

Michael Hampton
quelle
Danke @Michael Hampton ♦! Ich kam zurück, um meine eigene Frage zu beantworten, denn nachdem ich eine alternative Strategie verfolgt hatte, stieß ich schließlich darauf $realip_remote_addr. Es funktioniert wunderbar. Versuchte tatsächlich, proxy_protocol zum Laufen zu bringen und stieß auf die Nginx-
Patchnotizen