
用途
配置CDN后无法获取真实用户IP,WAF无法拦截真正的恶意IP,导致CDN IP被拦截影响正常用户访问或WAF无法正常进行拦截工作。遇到此问题可根据本文提供的教程实现获取CDN下的真实访客IP。
方法一
如果您的宝塔面板是最新版宝塔面板,可通过宝塔面板自带的CDN来源IP解析获取真实访客IP。
操作步骤:宝塔面板 → 网站 → 高级设置 → CDN来源IP解析

说明:该方法适用于新版本宝塔面板,个别旧版本宝塔面板没有该功能,旧版本宝塔面板可参考方法二。
方法二
单网站获取真实访客IP
通过修改网站的Nginx配置文件实现获取真实访客IP。
操作步骤:宝塔面板 → 网站 → 设置 → 配置文件

在你的网站配置文件的server 代码块中(建议加在server_name 下或SSL配置之前),添加以下内容:
server {
listen 80;
listen 443 ssl;
# ... 原有其他参数
# ---------- 获取真实源IP ----------
set_real_ip_from 210.16.184.215; # 填写上游IP地址
set_real_ip_from 210.16.184.0/24; # 填写上游IP段地址
real_ip_header X-Forwarded-For;
real_ip_recursive on;
# --------------------------------
# ... 其余配置保持不变
}
set_real_ip_from :声明您信任CDN回源IP段(只有来自这些IP的请求,Nginx才会信任其携带的X-Forwarded-For 头)。
real_ip_header X-Forwarded-For :从X-Forwarded-For 头中提取真实IP。
real_ip_recursive on :递归解析,从X-Forwarded-For 列表右侧(刚进来的代理 IP)开始向左剔除已信任的 CDN IP,直到找到第一个非信任 IP 作为真实客户端 IP。
全局网站获取真实访客IP
与单网站获取真实访客IP的方法一样,只是从网站配置文件变成了Nginx配置文件。
操作步骤:宝塔面板 → Nginx → 设置 → 配置修改

建议是添加在http 代码块中,最安全、最清晰的位置是:在access_log off; 这一行的下一行添加。server 代码块的上方一行。
保存后重载Nginx配置,这样所有的网站都实现了获取真实访客IP功能了。
总结
单网站:放在server 代码块的server_name 下方一行。
全局网站:放在http 代码块的最后一行(access_log off; 下方一行),server 代码块的上方一行。
最简单的还是使用最新版的宝塔面板的CDN真实IP解析功能,感谢宝塔为最新版提供了这么方便的功能。