CDN 缓存命中率为零的原因及排查步骤有哪些?

文章导读
CDN 缓存命中率为零通常意味着请求直接回源,最常见的原因是源站响应头禁止缓存、CDN 缓存规则配置错误,或域名备案及鉴权配置拦截了正常请求。
📋 目录
  1. 快速诊断:curl 命令实战
  2. 源站配置修正(Nginx 示例)
  3. CDN 控制台配置指引
  4. 验证与常见坑
A A

CDN 缓存命中率为零通常意味着请求直接回源,最常见的原因是源站响应头禁止缓存、CDN 缓存规则配置错误,或域名备案及鉴权配置拦截了正常请求。

先说结论:命中率为零通常是配置拦截了缓存或统计口径问题,需优先检查源站响应头和 CDN 缓存规则。

  • 先确认:源站是否返回了禁止缓存的 Header(如 no-cache)。
  • 先处理:CDN 控制台的缓存过期时间和缓存键配置。
  • 再验证:请求响应头中的缓存命中状态及控制台流量数据。

快速诊断:curl 命令实战

使用 curl 命令直接查看响应头,快速判断源站是否允许缓存。重点观察 Cache-ControlPragma 以及 CDN 特有的命中标识(如 X-Cache)。

curl -I https://your-domain.com/static/app.js

场景一:源站禁止缓存(导致未命中)

若返回头中包含 no-cacheno-store,CDN 将不会存储该资源。

HTTP/1.1 200 OK
Date: Mon, 01 Jan 2024 00:00:00 GMT
Content-Type: application/javascript
Cache-Control: no-cache
Pragma: no-cache
X-Cache: MISS

场景二:缓存生效(正常命中)

若返回头中包含 max-age 且 CDN 标识为 HIT,说明缓存正常。

CDN 缓存命中率为零的原因及排查步骤有哪些?
HTTP/1.1 200 OK
Date: Mon, 01 Jan 2024 00:00:00 GMT
Content-Type: application/javascript
Cache-Control: max-age=86400
X-Cache: HIT

源站配置修正(Nginx 示例)

若确认源站禁止了缓存,需修改 Web 服务器配置。以下是 Nginx 允许静态资源缓存的典型配置:

server {
    listen 80;
    server_name your-domain.com;

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires 1d;
        add_header Cache-Control "public";
        add_header X-Cache-Status $upstream_cache_status;
    }
}

修改配置后,记得重载 Nginx:nginx -s reload

CDN 控制台配置指引

  1. 检查缓存过期时间

    登录 CDN 控制台,进入「域名管理」->「缓存配置」。确认是否对特定文件后缀(如 .js, .css, .png)设置了缓存过期时间(TTL)。若设置为 0 秒或未配置,需调整为合理时长(如静态资源设置 1 天以上)。

  2. 检查缓存键规则

    若业务 URL 带有无关参数(如 ?v=123),在「缓存键配置」中选择“忽略参数”或“保留指定参数”,避免参数变化导致缓存分散。

  3. 检查基础配置与鉴权

    确认域名已完成备案(国内 CDN 必需)。检查防盗链黑白名单是否误拦截正常 Referer。若开启鉴权,确认客户端请求携带了正确的鉴权参数。

  4. 检查回源配置

    若控制台显示回源流量大于总下行流量,检查是否开启了“分片回源”而源站不支持 Range 请求。如有冲突,建议源站支持 Range 或关闭 CDN 分片回源功能。

验证与常见坑

  • 响应头验证:再次请求资源,查看响应头中是否出现 X-Cache: HIT 或类似命中标识(不同厂商标识不同)。
  • 控制台数据:在 CDN 控制台查看“流量命中率”监控图表,观察数值是否回升。注意数据可能有几分钟延迟。
  • 多次请求测试:对同一 URL 发起多次请求,第一次通常为 MISS,后续请求应变为 HIT。
  • HEAD 请求不缓存:部分 CDN 默认不缓存 HEAD 请求,即使预热也可能显示未命中。
  • 频繁刷新缓存:提交刷新任务后,已缓存内容会被强制过期,短时间内命中率会下降。
  • 动态内容过多:若加速域名下多为 PHP、JSP 等动态页面,默认不回源缓存,需区分静态资源目录进行加速。