Kubernetes部署链路中Nginx $remote_addr始终返回127.0.0.1问题咨询
问题原因
$remote_addr是NGINX从TCP连接层直接获取的对端IP,默认不会读取请求头内的IP字段。你的请求链路中,Kubernetes Service转发请求到NGINX时做了源地址转换(SNAT),且走本地回环链路转发,因此NGINX拿到的TCP连接源IP天然就是127.0.0.1。- 你配置的
ngx_http_realip_module没有达到替换$remote_addr的预期效果:- 虽然你设置了
real_ip_header X-Forwarded-For,准备用该头的内容替换$remote_addr,但从你提供的访问日志可以看到,最后一个字段$http_x_forwarded_for的值为-,说明上游的Kubernetes Service转发请求时没有携带X-Forwarded-For请求头,没有可用来替换的真实客户端IP值。 - 即使后续Kubernetes Service配置了透传X-Forwarded-For头,你当前的
set_real_ip_from仅配置了127.0.0.1为可信地址,还需要确认Kubernetes Service的转发出口IP是否属于该可信范围,否则realip模块依旧不会触发替换逻辑。
- 虽然你设置了
修复建议
- 调整Kubernetes Service配置,开启外部流量策略保留源IP,或者配置转发时自动添加X-Forwarded-For头携带真实客户端IP。
- 把Kubernetes Service/集群节点的网段加入NGINX的
set_real_ip_from可信地址列表,保证realip模块可以正常触发替换。
内容的提问来源于stack exchange,提问作者henry-jo
相关产品推荐
相关产品推荐

