Nginx 配了反向代理,为什么后端拿到的客户端 IP 全是 127.0.0.1?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
其实答案很简单: Nginx 会重新和后端建立连接。后端默认看到的是 Nginx 这个直接连接者,而不是最初的客户端。 后端看到的是“谁连过来”没有 Nginx 时: 加了反向代理后: 如果配置是: 后端看到的连接来源自然就是 127.0.0.1。 这不是 IP 被改坏了,直接连后端的就是 Nginx。 真实客户端 IP 要靠请求头往后传Nginx 可以把它看到的客户端地址放进请求头:
后端读取这些头,才能知道最初的访问者。X-Forwarded-For 会保留整条代理链路。 多层代理时,先让 Nginx 识别可信来源线上常见的链路更长: 这时 Nginx 的 $remote_addr 可能已经是负载均衡器。要明确哪些上游代理可以信任:
Nginx 只会对来自可信网段的请求,按这个头还原客户端地址。 不能谁带 IP 头就信谁X-Forwarded-For 只是 HTTP 请求头,客户端也能自己伪造: 应用不能无条件相信它。只有请求来自信任的 Nginx 或负载均衡器,才读取它转发的客户端地址。 后端框架也通常有“信任代理”的配置。开得太宽,可能被伪造 IP;完全没开,又只会拿到 Nginx 的地址。 简单总结一下
所以后端 IP 全是 127.0.0.1,通常不是日志出了问题。 客户端 IP 需要被明确、安全地往后传。 原来如此。 阅读原文:点击这里 该文章在 2026/9/9 11:13:53 编辑过 |
关键字查询
相关文章
正在查询... |