我的环境中有用户请求经过多个系统:
[客户端] --> [ELB] ---> [nginx] --> [web]
(ELB = AWS 弹性负载均衡器)
得益于此回答X-Forwarded-For
,我让 nginx 确定正确的客户端 IP 地址,并使用和标头将正确的客户端 IP 地址传递给上游服务器 (web) 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,但我丢失了实际向代理发送请求的系统的 IP 地址(即 ELB)。
总体而言,拥有客户端 IP 对我来说更重要,但我希望能够记录完整的请求链,以便了解(和调试)流量的流动方式。目前,我只能让 nginx 记录客户端 IP、其自己的 IP 和上游服务器 IP。我还希望能够记录 ELB IP。
答案1
您可以在以下位置获取连接 ELB 的原始客户端地址变量$realip_remote_addr
,但请注意,此变量仅在 nginx 1.9.7 中添加,因此您需要运行最新版本的 nginx。