最可靠方式是直接模拟cdn回源请求,验证源站仅响应合法cdn节点:用curl伪造回源ip测试放行与拦截,结合nginx日志、防火墙log规则及真实cdn缓存清理验证。

直接模拟 CDN 回源请求是最可靠的方式,重点不是测“能不能访问”,而是验证源站是否只响应合法 CDN 节点、拒绝其他来源。
用 curl 模拟不同来源的回源请求
在源站服务器本地或可信内网机器上执行以下命令,观察返回状态码:
- 模拟合法 CDN 回源(使用官方公布的回源 IP 段中的一个地址):
curl -H "Host: example.com" --interface 173.245.48.10 https://your-origin.com/test.html
(注意:需提前在系统路由或测试机上绑定该 IP,或用 iptables SNAT 伪造源 IP;更简单方式是临时改 Nginx 的real_ip_header和set_real_ip_from配合 X-Forwarded-For 测试) - 模拟非法来源(如自己电脑公网 IP 或任意非 CDN 段):
curl -H "Host: example.com" https://your-origin.com/test.html
应返回 403 或连接被拒绝(取决于防火墙是否 DROP 还是 Nginx return)
检查 Nginx 日志确认匹配逻辑
在 Nginx 配置中加入日志变量,直观看到哪些请求被放行、哪些被拦截:
- 在
log_format中添加$remote_addr和自定义标记变量(如$cdn_origin),配合 map 判断是否命中白名单 - 配置示例:
map $remote_addr $cdn_origin {<br> default 0;<br> 173.245.48.0/20 1;<br> 103.21.244.0/22 1;<br> }
再在 access_log 中记录$cdn_origin,查日志就能快速识别未匹配的请求来源
结合防火墙日志交叉验证
iptables/nftables 的 DROP 规则默认不记日志,需手动开启:
- 在 DROP 规则前加一条 LOG 规则(以 iptables 为例):
iptables -I INPUT -p tcp --dport 443 -j LOG --log-prefix "CDN-FW-DENY: " - 然后用
tail -f /var/log/messages | grep "CDN-FW-DENY"实时观察被防火墙拦截的请求,确认是否为预期的非 CDN IP - 若日志中出现 Cloudflare 或阿里云回源段 IP 被拦,说明 IP 段配置有误或顺序不对(允许规则必须在 LOG/DROP 之前)
用真实 CDN 控制台触发回源验证
这是最贴近生产环境的测试方式:
- 在 CDN 厂商后台清空某资源缓存(如 Cloudflare 的 Purge Everything 或阿里云的刷新预热)
- 立即访问该资源,同时监控源站 Nginx access.log 和错误日志
→ 若看到请求日志且状态为 200,说明回源成功、IP 白名单放行正常
→ 若 Nginx 日志无记录但 CDN 返回 502/503,大概率是防火墙已拦截,需查 DROP 日志 - 可配合
tcpdump -i any port 443 and src host <cdn_ip></cdn_ip>抓包,确认连接是否真正到达 Nginx 监听端口











