如何通过Nginx的Proxy-Set-Header功能将客户端IP透传给后端服务器?
- 内容介绍
- 文章标签
- 相关推荐
本文共计779个文字,预计阅读时间需要4分钟。
在Nginx作为反向代理时,配置示例如下:
确保 Nginx 正确透传真实 IP 头字段
Nginx 本身不自动识别“真实 IP”,需根据上游来源显式设置 HTTP 头。常见组合如下:
-
X-Real-IP:最简方式,只传一个 IP(推荐用于单层代理)
proxy_set_header X-Real-IP $remote_addr; -
X-Forwarded-For:标准字段,支持追加(多层代理时保留原始链路)
proxy_set_header X-Forwarded-For $remote_addr;
若已有值(如上一级代理已设),可用$proxy_add_x_forwarded_for自动追加:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - X-Forwarded-Proto 和 X-Forwarded-Host:辅助传递协议与域名,避免后端误判 HTTPS 或生成错误链接
限定可信代理范围,防止 IP 伪造
仅设 header 不够——攻击者可手动发送 X-Forwarded-For: 1.2.3.4 伪造 IP。Nginx 必须明确知道哪些客户端是“可信代理”,才信任其携带的转发头。
本文共计779个文字,预计阅读时间需要4分钟。
在Nginx作为反向代理时,配置示例如下:
确保 Nginx 正确透传真实 IP 头字段
Nginx 本身不自动识别“真实 IP”,需根据上游来源显式设置 HTTP 头。常见组合如下:
-
X-Real-IP:最简方式,只传一个 IP(推荐用于单层代理)
proxy_set_header X-Real-IP $remote_addr; -
X-Forwarded-For:标准字段,支持追加(多层代理时保留原始链路)
proxy_set_header X-Forwarded-For $remote_addr;
若已有值(如上一级代理已设),可用$proxy_add_x_forwarded_for自动追加:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - X-Forwarded-Proto 和 X-Forwarded-Host:辅助传递协议与域名,避免后端误判 HTTPS 或生成错误链接
限定可信代理范围,防止 IP 伪造
仅设 header 不够——攻击者可手动发送 X-Forwarded-For: 1.2.3.4 伪造 IP。Nginx 必须明确知道哪些客户端是“可信代理”,才信任其携带的转发头。

