使用 Real-IP 时如何记录 $remote_addr 的原始值

mic*_*elg 10 nginx logging reverse-proxy x-forwarded-for amazon-elb

我的环境有用户请求通过多个系统:

[客户端] --> [ELB] ---> [nginx] --> [网络]

(ELB = AWS 弹性负载均衡器)

多亏了这个答案,我让 nginx 确定并将正确的客户端 IP 地址传递给带有X-Forwarded-ForX-Real_IP标头的上游服务器(Web)。相关的 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;
Run Code Online (Sandbox Code Playgroud)

我的问题是,nginx 中的 Real IP 模块$remote_addrX-Forwarded-For计算结果替换了现有变量。这为我提供了原始客户端 IP,但我丢失了实际将请求发送到代理(即 ELB)的系统的 IP 地址。

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

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

Mic*_*ton 9

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