本文按症状汇总 CDN 缓存场景的排障方法:缓存不生效与未命中、缓存命中率低与回源率高、响应头与跨域异常、视频与大文件异常、内容不更新与访问异常。
通用排查前置步骤
本文适用于阿里云 CDN,且加速域名已完成接入、CNAME 解析已生效。若使用全站加速(DCDN),部分配置入口和功能名称可能不同,请以控制台实际显示为准。
以下确认项在多数缓存问题中都会用到,建议开始排查前先逐项完成,避免因环境干扰得出错误结论:
确认项 | 说明 |
确认 CNAME 解析正确 | 执行 |
确认配置已全网生效 | 控制台中规则状态需为成功,配置下发到全网节点通常需要 3~5 分钟。 |
排除浏览器本地缓存 | 使用无痕模式或 |
清除 CDN 存量缓存 | 新配置只对配置生效后的新请求生效,已按旧策略缓存的资源需通过刷新预热提交 URL 刷新或目录刷新。 |
本文多处将「缓存过期时间设为 0 秒」作为兜底手段。过期时间为 0 意味着每次请求都回源,会显著增加源站负载并降低加速效果,仅建议对确实需要实时性的动态内容(如 API 接口)使用,不要对静态资源全局配置。
如何判断缓存是否命中
排查缓存问题前,先通过响应头确认资源的缓存状态:
用 GET 请求查看响应头:执行
curl -v -o /dev/null "http(s)://加速域名/资源路径"。curl -I(HEAD 请求)在部分场景可能不触发节点对资源体的真实缓存逻辑,导致误判为未命中,建议优先使用 GET 请求验证。看 X-Cache 判断命中状态:
HIT表示命中缓存;MISS或该字段不存在表示未命中,本次请求已回源。看 Age 与 X-Swift-CacheTime 判断剩余缓存时间:
Age是资源已在节点缓存的秒数,需与 X-Cache 一起判断——X-Cache 为 MISS 且 Age 为 0 表示本次请求已回源;X-Cache 为 HIT 但 Age 为 0,表示资源刚被缓存不到 1 秒。X-Swift-CacheTime是允许缓存的总时长,剩余时间 = X-Swift-CacheTime − Age。确认请求是否经过 CDN:若响应头
Server为源站标识(如AliyunOSS、nginx)且没有 X-Cache、X-Swift-CacheTime 等 CDN 响应头,说明请求未经过 CDN 节点而是直连了源站。请用dig 加速域名或nslookup 加速域名确认最终解析结果,只保留 CDN 分配的 CNAME 记录,删除指向源站 IP 的 A/AAAA 记录或指向源站域名的 CNAME 记录。
缓存不生效与未命中类
缓存命中率低与回源率高类
响应头与跨域异常类
视频与大文件异常类
内容与访问异常类
仍未解决怎么办
提交工单前,建议先通过以下方式自助定位:
查看实时日志:在控制台查看具体请求的缓存状态、回源情况和响应码分布,确认问题集中在哪些 URL 或时段。
使用控制台诊断工具:输入出现问题的 URL 进行检测,快速获取解析、回源和响应头信息。
做对比测试:分别通过 CDN 和直连源站访问同一资源,对比响应头和内容差异,判断问题在 CDN 侧还是源站侧。
若自助排查后问题仍未解决,建议收集以下信息后提交工单,以加快定位:
加速域名和具体的请求 URL。
复现问题的
curl -v完整输出(含请求头和响应头)。问题发生的大致时间、地域和运营商。
源站类型(OSS、ECS、SLB、第三方源站等)及源站是否支持 Range 请求。
已尝试的排查步骤及各步结果。
若问题涉及缓存命中率,提供控制台命中率截图及对应的时间范围。