源站如何获取客户端真实 IP

配置宝塔/Nginx 的 real_ip 模块,让源站程序拿到访客真实 IP 而不是 CDN 节点 IP。

更新于 2026-09-06

接入 CDN 后,源站默认看到的是CDN 节点的 IP。CDN 会在回源请求里携带两个请求头:

  • X-Real-IP:客户端真实 IP
  • X-Forwarded-For:客户端 IP(多级代理时为链路,第一项即真实客户端)

源程序读取这两个头即可拿到真实 IP。如果不想改程序,也可以直接在 Nginx 层配置:

宝塔面板(不用改程序)

网站配置文件的 server 块里加入:

set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;

保存并重载 Nginx 后,PHP/程序里的 remote_addr 就会是真实客户端 IP。

安全建议:如果能整理出节点网段,把 0.0.0.0/0 换成具体的 set_real_ip_from 节点网段;,避免来访者伪造 X-Forwarded-For 头。

程序里直接读请求头

PHP:  $_SERVER['HTTP_X_REAL_IP']
Node: req.headers['x-real-ip']
Python(Django): request.META.get('HTTP_X_REAL_IP')

四层转发的场景

TCP/UDP 转发没有 HTTP 头,需要客户端真实 IP 时,在转发详情开启 Proxy Protocol,并让源站程序(如游戏服务端、HAProxy)解析 Proxy Protocol,即可获得真实来源 IP。

首页|登录|注册

正在加载 梦帆云…