1.
准备工作与基本检测命令
- 安装常用工具:curl、dig、nslookup、traceroute。
- 使用 dig 查看域名解析记录:dig +short example.com A / CNAME。
- 使用 curl 获取响应头:curl -I -L https://example.com 。
- 使用 traceroute 或 mtr 检查网络跳数,判断是否经过边缘节点。
- 使用在线工具(如 securitytrails、whois)核对域名注册与DNS服务提供商信息。
- 记录初始 RTT 和下载速度作为对比基线。
2.
从响应头快速判断是否使用了CDN
- 检查常见CDN标识:CF-Cache-Status(Cloudflare)、X-Cache(Fastly/CloudFront)、Via/Server头。
- 查找 Age 字段:存在且大于0通常表示缓存命中,Age=3600 表示对象已在边缘缓存了一小时。
- 查找 Cache-Control/Expires:max-age=86400 表示可缓存24小时;no-cache/no-store表示不缓存。
- 示例命令:curl -I https://static.example.com 返回 CF-Cache-Status: HIT、Age: 1234。
- 若dig返回CNAME指向 cdn.example.net 或 cloudfront.net,基本可以断定使用了CDN。
- 注意绕过缓存测试:curl -H "Cache-Control: no-cache" 可强制回源。
3.
判断缓存策略是否有效的具体数据方法
- 使用多地点测试:从三个不同节点(国内、电信/联通/移动,或使用海外VPS)分别执行 curl -I。
- 比较响应头中的 Age、ETag、Last-Modified、X-Cache 值。
- 检测缓存穿透:并发请求数与回源流量的对比(例如并发1000次,回源请求应远小于1000)。
- 用时间序列测试 TTL:在缓存到期前后分别请求,验证 Cache-Control max-age 的实际效果。
- 测量带宽与延迟:有CDN时边缘节点 RTT 会明显降低,举例:直连 RTT 120ms,CDN 边缘 RTT 20ms。
- 记录回源带宽消耗以判断是否需要调整缓存策略。
4.
表格演示:响应头示例对比(居中,边框1)
| 检测项 | 使用CDN(Cloudflare) | 未使用CDN(直连Nginx) |
| 示例响应头 | CF-Cache-Status: HIT Age: 1234 Cache-Control: max-age=86400 | Server: nginx/1.18.0 Cache-Control: max-age=3600 X-Cache: MISS |
| RTT(ms) | 20 | 120 |
| 回源请求率 | 5% | 100% |
| 并发下的回源带宽 | 50 Mbps | 950 Mbps |
5.
真实案例:example.com 在Cloudflare前端和直连对比
- 案例背景:域名 example.com,主机为 VPS(4核/8GB,带宽1Gbps,公网IP)。
- Cloudflare 开启 CDN + 缓存:配置页面规则 Cache Everything, Edge Cache TTL 24h。
- curl -I 输出(Cloudflare):CF-Cache-Status: HIT、Age: 43200、Server: cloudflare。
- 直连测试(关闭Cloudflare,解析到VPS IP):Cache-Control: max-age=3600、X-Cache: MISS、平均 CPU 占用升高 30%。
- 结论:Cloudflare 边缘缓存命中率 >90%,回源流量下降 85%,且抗DDoS能力在流量高峰期显著降低主机负载。
6.
如何根据检测结果调整服务器与防护配置
- 若 Age 常为0 或 X-Cache: MISS,检查 Cache-Control 是否被设置为 no-cache,修改为 max-age 合理值。
- Nginx 示例配置(缓存静态):proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:10m max_size=10g inactive=60m; proxy_cache_key "$scheme$host$request_uri";
- 为API设定短TTL(例如 max-age=60),为静态资源设定长TTL(例如 max-age=2592000)。
- 开启 CDN 的防DDoS 模式与速率限制:Cloudflare Rate Limiting 或 WAF,设置异地挑战页与 JS challenge。
- 监控建议:结合 access.log、CDN 控制台与 Grafana 监控回源请求数、带宽与 5xx 错误率。
- 若需要精确判断,使用 tcpdump + Wireshark 在回源主机抓包,验证是否为真实客户端请求或来自CDN边缘。