Come registrare il valore originale di $ remote_addr quando si utilizza Real-IP


9

Il mio ambiente ha richieste degli utenti che passano attraverso un numero di sistemi:

[Client] -> [ELB] ---> [nginx] -> [web]

(ELB = AWS Elastic Load Balancer)

Grazie a questa risposta , ho nginx che determina e passa l'indirizzo IP client corretto ai server upstream (web) con le intestazioni X-Forwarded-Fore X-Real_IP. La configurazione nginx pertinente:

    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;

Il mio problema è questo, il modulo IP reale in nginx sostituisce la $remote_addrvariabile esistente con il risultato dei suoi X-Forwarded-Forcalcoli. Questo mi dà l'IP del client di origine, ma sto perdendo l'indirizzo IP del sistema che ha effettivamente inviato la richiesta al proxy (ovvero l'ELB).

Nel complesso, avere l'IP client è più importante per me, ma vorrei essere in grado di registrare l'intera catena di richieste in modo da poter capire (e eseguire il debug) come scorre il traffico. Attualmente, posso solo fare in modo che nginx registri l'IP del client, il suo IP e l'IP del server upstream. Vorrei poter registrare anche l'IP ELB.

Vedo che X-Istence ha fatto la stessa domanda nel 2013, con poca fortuna. Da allora qualcosa è cambiato o migliorato?

Risposte:


8

È possibile ottenere l'indirizzo client originale dell'ELB di connessione nella variabile$realip_remote_addr , ma tenere presente che questa variabile è stata aggiunta solo in nginx 1.9.7, quindi sarà necessario eseguire una versione molto recente di nginx.


Grazie @Michael Hampton ♦! Stavo tornando per rispondere alla mia domanda perché, dopo aver perseguito una strategia alternativa, alla fine mi sono imbattuto in $realip_remote_addr. Funziona magnificamente. Stavo effettivamente cercando di far funzionare proxy_protocol e ho trovato le note sulla patch di nginx per 1.9.7
michaelg
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.