在Nginx中正确配置set_real_ip_from和real_ip_header是获取真实客户端IP的关键,需根据CDN官方IP段精确设置,启用real_ip_recursive on并验证生效,严禁滥用通配符或忽略头字段校验。

在Nginx中正确配置 set_real_ip_from 是让后端应用(如PHP、Node.js)获取真实客户端IP的前提,尤其在使用CDN(如Cloudflare、阿里云CDN、腾讯云CDN、百度云加速等)时必须设置。否则,$remote_addr 将显示CDN节点的IP,而非用户真实IP。
确认你使用的CDN并获取其可信IP段
不同CDN厂商公开维护了其边缘节点的IP地址范围,必须从官方渠道获取并定期更新:
- Cloudflare:访问 https://www.php.cn/link/c1d6eb5a43d6092a1df9fc6bb5c2ce54 和 https://www.php.cn/link/9377e91beb4b28f3f27a6c7060b8fc2a
- 阿里云CDN:查看文档《CDN回源IP段》,注意区分“回源IP”和“客户端请求入口IP”,此处需用后者(即用户经CDN访问你源站时,CDN发起请求所用的出口IP段)
- 腾讯云CDN:参考《CDN节点IP列表》
- 百度云加速:查阅控制台或文档中的“节点IP段”说明
⚠️ 不要凭经验猜测或复用他人旧配置——IP段会动态调整,过期配置可能导致真实IP丢失或安全风险(如伪造X-Forwarded-For)。
在Nginx中配置 set_real_ip_from 和 real_ip_header
核心是两步:声明哪些IP来源可信(即CDN节点),再指定从哪个HTTP头读取原始客户端IP。典型配置如下:
set_real_ip_from 173.245.48.0/20; set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; # ... 其他Cloudflare IPv4段(共约15行) set_real_ip_from 2405:b500::/32; set_real_ip_from 2405:b500:ffff::/48; # ... 对应的IPv6段 <p>real_ip_header X-Forwarded-For; real_ip_recursive on;
说明:
-
set_real_ip_from每行填一个CIDR网段(支持IPv4/IPv6),可重复多行;不支持域名或通配符 -
real_ip_header X-Forwarded-For表示从该HTTP头提取真实IP。CDN通常会在请求中带上这个头,并把用户原始IP放在最左边(例如:X-Forwarded-For: 203.0.113.42, 198.51.100.1) -
real_ip_recursive on启用递归解析:当请求经过多层代理(如 CDN → Nginx → 另一Nginx),它会从右往左跳过所有可信IP,取第一个不可信IP作为真实客户端IP。若只有一层CDN,可设为off,但建议保持on更健壮
验证配置是否生效
重启Nginx后,可通过日志或调试接口确认:
- 在
log_format中加入$realip_remote_addr或$remote_addr对比($realip_remote_addr是Nginx解析后的“真实IP”,$remote_addr是TCP连接发起方IP) - 临时加一段location返回头信息:
location /debug-ip { return 200 "realip: $realip_remote_addr\nforwarded: $http_x_forwarded_for\nremote: $remote_addr"; } - 用curl模拟CDN请求测试:
curl -H "X-Forwarded-For: 192.0.2.100" http://yoursite.com/debug-ip
若配置正确,realip应显示192.0.2.100,而非你本地IP或CDN节点IP
安全提醒与常见错误
错误配置可能引发IP伪造漏洞或日志混乱:
- ❌ 不要将公网任意IP(如
0.0.0.0/0)加入set_real_ip_from—— 这等于完全信任所有请求头,攻击者可随意伪造X-Forwarded-For - ❌ 不要遗漏
real_ip_header或拼写错误(如写成X-Forward-For) - ❌ 在
http块配置后,未在对应server或location中启用(实际只需在http或server级别配置一次即可生效) - ✅ 建议配合
geo或map模块限制仅对CDN IP允许携带X-Forwarded-For,进一步防御伪造(进阶防护)


















