我的环境中的用户请求通过多个系统传递:
[客户]-> [ELB] ---> [nginx]-> [网络]
(ELB = AWS Elastic Load Balancer)
多亏了这个答案,我让nginx确定了正确的客户端IP地址并将其传递给带有X-Forwarded-For
和X-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。
$realip_remote_addr
。它工作得很漂亮。实际上是在尝试使proxy_protocol正常工作,并遇到了1.9.7的nginx补丁说明