必须关闭宝塔所有自动cdn功能、确保cloudflare dns为橙色云朵且a记录指向服务器公网ip、宝塔配置需保留原始host头、禁用强制跳转,并在nginx中配置cloudflare ip段信任及real_ip_header以正确获取真实用户ip。

要在宝塔面板上安全启用Cloudflare免费CDN,必须切断所有可能暴露源站IP的代理链路,确保请求只经Cloudflare边缘节点回源到宝塔,且Nginx能正确识别真实访客IP。
关闭宝塔所有自动CDN功能
打开宝塔面板 → 网站 → 找到你的站点 → 点击“设置” → 切换到“反向代理”标签页 → 删除所有已存在的代理规则(哪怕只有一条指向127.0.0.1或8080端口的规则,也会导致Cloudflare回源失败)。
返回“SSL”标签页 → 只保留“强制HTTPS”勾选,其余如“启用CDN加速”“自动适配移动端”“开启HTTP/2”等全部取消勾选——这些选项与Cloudflare的边缘终止逻辑冲突,开启后会引发526证书错误或混合内容警告。
进入左侧菜单“安全” → “防火墙” → 检查是否启用了“CDN回源白名单自动同步”,若已开启,请立即关闭。Cloudflare免费版不提供固定回源IP段,该功能在此场景下不仅无效,还会误封真实回源流量。
Cloudflare DNS必须橙色云朵+公网IP直连
登录Cloudflare控制台 → 左侧DNS → 找到你的域名A记录(例如@或www)→ 确保状态为Proxied(橙色云朵图标)。
记录值必须填你服务器的公网IPv4地址,不是宝塔首页显示的“127.0.0.1”或内网IP(如192.168.x.x、172.16.x.x)。可在服务器终端执行curl ifconfig.me实时获取真实出口IP。
若DNS记录值是127.0.0.1或内网地址,Cloudflare将无法穿透到你的宝塔服务,用户访问时直接报521错误(源站不可达)。
宝塔网站配置:保留原始Host头并修复真实IP
第一步:进入网站“设置” → “配置文件”,定位到server块中server_name行,确认它明确列出你的完整域名,例如:
server_name example.com www.example.com;
第二步:删除或注释掉任何形如return 301 https://$host$request_uri;的强制跳转语句。Cloudflare已终止HTTPS,宝塔只需处理HTTP回源请求;否则将触发301→Cloudflare→301循环,最终返回400 Bad Request。
第三步:在location / {}块内添加以下两行,确保Nginx能从Cloudflare传递的Header中提取真实IP:
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
…(其他Cloudflare IP段可官网查最新列表)
real_ip_header X-Forwarded-For;
real_ip_recursive on;
第四步:保存配置 → 点击右上角“重载配置”使Nginx生效。这一步不做,日志里所有访客IP都会显示为Cloudflare任一节点IP(如172.69.x.x),无法做地域统计或风控拦截。
验证回源是否干净
方法一:访问你的网站 → 右键查看网页源码 → 搜索“cf-ray”,若存在类似cf-ray: 1234567890abcdef-hkg的字段,说明请求已走Cloudflare边缘。
方法二:登录宝塔 → 网站 → 日志 → 查看最近访问日志,确认首列IP不是Cloudflare节点段(如173.245.x.x),而是真实用户IP(如203.123.x.x)。
方法三:在网站根目录新建ip.php,内容为,访问该文件,输出结果应为真实访客IP,而非127.0.0.1或Cloudflare节点IP。











