Real-IP 사용시 $ remote_addr의 원래 값을 기록하는 방법


9

내 환경에는 여러 시스템을 통과하는 사용자 요청이 있습니다.

[클라이언트]-> [ELB] ---> [nginx]-> [웹]

(ELB = AWS Elastic Load Balancer)

답변 덕분에 nginx가 올바른 클라이언트 IP 주소를 결정하고 X-Forwarded-ForX-Real_IP헤더 가있는 업스트림 서버 (웹)에 전달했습니다 . 관련 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;

내 문제는 이것이 nginx의 Real IP 모듈 이 기존 변수를 계산 결과로 대체$remote_addr 한다는 것입니다 X-Forwarded-For. 이렇게하면 원래 클라이언트 IP가 제공되지만 실제로 요청을 프록시 (예 : ELB)로 보낸 시스템의 IP 주소가 손실됩니다.

전반적으로 클라이언트 IP를 갖는 것이 더 중요하지만 트래픽의 흐름을 이해하고 디버그 할 수 있도록 전체 요청 체인을 기록 할 수 있기를 바랍니다. 현재 nginx가 클라이언트 IP, 자체 IP 및 업스트림 서버 IP 만 기록하도록 할 수 있습니다. ELB IP도 기록하고 싶습니다.

내가 볼 X-Istence이 같은 질문 질문을 조금 운으로, 2013 년. 그 이후로 변경되거나 개선 된 것이 있습니까?

답변:


8

변수$realip_remote_addr 에서 연결 ELB의 원래 클라이언트 주소를 얻을 수 있지만이 변수는 nginx 1.9.7에서만 추가되었으므로 최신 버전의 nginx를 실행해야합니다.


감사합니다 @Michael Hampton ♦! 대체 전략을 추구 한 끝에 마침내 넘어 졌기 때문에 본인의 질문에 답변하기 위해 다시 왔습니다 $realip_remote_addr. 아름답게 작동합니다. 실제로 proxy_protocol을 작동 시키려고 노력했고 1.9.7에 대한 nginx 패치 노트를 보았습니다.
michaelg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.