使用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_addrX-Forwarded-For计算结果替换了现有变量。这给了我原始的客户端IP,但是我丢失了实际上将请求发送到代理(即ELB)的系统的IP地址。

总的来说,拥有客户端IP对我来说更重要,但是我希望能够记录完整的请求链,以便我可以了解(并调试)流量的流向。目前,我只能让nginx记录客户端IP,它自己的IP和上游服务器IP。我也希望能够登录ELB IP。

我看到X-Istence在2013年问了同样的问题,运气不佳。从那以后有什么变化或改善?

Answers:


8

您可以在变量$realip_remote_addr中获取连接的ELB的原始客户端地址,但是请注意,此变量仅是在nginx 1.9.7中添加的,因此您需要运行最新版本的nginx。


谢谢@迈克尔·汉普顿♦!我回来回答自己的问题,是因为在寻求替代策略之后,我终于偶然发现了$realip_remote_addr。它工作得很漂亮。实际上是在尝试使proxy_protocol正常工作,并遇到了1.9.7的nginx补丁说明
michaelg 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.