Jak zapisać oryginalną wartość $ remote_addr podczas korzystania z Real-IP

9

Moje środowisko ma żądania użytkowników przesyłane przez wiele systemów:

[Klient] -> [ELB] ---> [nginx] -> [web]

(ELB = AWS Elastic Load Balancer)

Dzięki tej odpowiedzi mam Nginx określający i przekazujący poprawny adres IP klienta do serwerów nadrzędnych (sieci) z nagłówkami X-Forwarded-Fori X-Real_IP. Odpowiednia konfiguracja nginx:

    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;

Mój problem polega na tym, że moduł Real IP w nginx zastępuje istniejącą $remote_addrzmienną wynikiem jej X-Forwarded-Forobliczeń. Daje mi to początkowy adres IP klienta, ale tracę adres IP systemu, który faktycznie wysłał żądanie do proxy (tj. ELB).

Ogólnie rzecz biorąc, posiadanie adresu IP klienta jest dla mnie ważniejsze, ale chciałbym móc rejestrować pełny łańcuch żądań, aby móc zrozumieć (i debugować) przepływ ruchu. Obecnie mogę tylko nginx rejestrować adres IP klienta, własny adres IP i adres IP serwera nadrzędnego. Chciałbym również móc zarejestrować adres IP ELB.

Widzę, że X-Istence zadało to samo pytanie w 2013 roku, ale przy odrobinie szczęścia. Czy od tego czasu coś się zmieniło lub poprawiło?

Michael
źródło

Odpowiedzi:

8

Możesz uzyskać oryginalny adres klienta łączącego ELB w zmiennej$realip_remote_addr , ale pamiętaj, że ta zmienna została dodana tylko w wersji nginx 1.9.7, więc musisz uruchomić najnowszą wersję nginx.

Michael Hampton
źródło
Dzięki @Michael Hampton ♦! Wracałem, aby odpowiedzieć na własne pytanie, ponieważ po zastosowaniu alternatywnej strategii w końcu natknąłem się na $realip_remote_addr. Działa pięknie. Faktycznie próbuje proxy_protocol do pracy i natknął się na nginx notatki patch do 1.9.7
michaelg