给站点挂上 CDN 之后,源站的访问日志里 IP 全变成了 CDN 节点的地址,看起来所有访客都来自同一个地方。这会导致两个问题:一是看不到真实访客分布,二是 fail2ban 之类的防护会误封 CDN 节点,直接让全站对一片区域不可用。
原理
CDN 回源时会带上一个头,通常是 X-Forwarded-For 或 CF-Connecting-IP(Cloudflare)。源站需要信任这个头,并从中取出最左侧的真实 IP。
Nginx 的配置
# 信任 CDN 回源段的 IP,这里以 Cloudflare 为例,需按实际段更新
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
# ... 其余段省略,务必用官方最新的 IP 段
real_ip_header CF-Connecting-IP;
real_ip_recursive on;
配置写在 http 块或者 server 块里都行。改完 nginx -t 然后 reload。
验证
tail -5 /www/wwwlogs/你的站点.log
如果第一列的 IP 变成了各地不同的公网地址,说明生效了。如果还是固定几个 IP,检查两点:一是 set_real_ip_from 的段是否覆盖了实际的回源 IP;二是 CDN 是否真的透传了这个头。
别忘了 PHP 侧
如果程序需要记录访客 IP(比如评论防刷),$_SERVER['REMOTE_ADDR'] 拿到的仍然是 CDN 节点。需要在 PHP 里读 HTTP_CF_CONNECTING_IP 或 HTTP_X_FORWARDED_FOR。多数建站程序有对应的开关,找不到就手动改入口文件。
防护策略要跟着改
源站上的 fail2ban 如果按 IP 封禁,封的会是 CDN 节点。正确做法是在 CDN 侧做频率限制(WAF 规则),源站只保留"异常请求特征"的拦截。至少要把 CDN 的回源段加入 fail2ban 的 ignoreip,否则一次误封可能让整站短暂不可用。
一个常被忽略的点
用了 CDN 之后,源站应该只允许 CDN 回源,不直接对公网开放。可以在防火墙里只放行 CDN 的 IP 段,这样别人就绕不过 CDN 直接打源站,也就绕不过你的防护和缓存。这一步能挡掉大量扫描和爬虫。
相关阅读
- 使用IMG2KVM快捷为Proxmox导入IMG镜像img2kvm是一个在PVE下导入IMG文件到虚拟机的工具,可以将img文件(含gz的压缩格
- 最新WIN10镜像下载.文件名 cn_windows_10_business_edition
- fail2ban 防暴力破解实战:让扫描器无处下手
- VPS 怎么选?国内外主机、线路与配置全解析(2025版)





还没有评论,来说两句吧...