前言
上一篇《自建CDN还是用普通CDN?选型判断和成本对比》把选型的边界讲清楚了。方案落地之后,还有一个指标最能直接反映 CDN 用得好不好——缓存命中率。它指边缘节点直接返回缓存内容、不需要回源处理的请求占比。命中率越高,回源越少,源站压力越小,访客拿到资源的速度也越快;命中率上不去,CDN 等于只发挥了"中转站"的作用,加速效果和账单都会很难看。
排查命中率问题,先分清两个口径:请求命中率(按请求数算)和流量命中率(按传输字节算)。大文件往往请求少、字节多,两者经常相差很大,先搞清楚自己看的是哪个,再对症下药。下面是六个最常见的原因,按"现象 → 原因 → 解决"整理。

原因一:源站没给缓存指示
现象:大部分请求都在回源,命中率长期在低位徘徊。
原因:CDN 判断一个资源"能不能缓存、缓存多久",优先看源站返回的 Cache-Control 响应头。很多网站的源站(尤其是默认配置的 Nginx)压根没给静态资源设置这个头,CDN 只能按保守策略处理,能不缓存就不缓存。
解决:在源站给静态资源补上明确的缓存指示,比如图片、CSS、JS 设置 Cache-Control: max-age=31536000(一年)。源站的头就是 CDN 的"指令",指令清晰了,节点才敢放心存。
原因二:URL 带着随机查询参数
现象:明明是同一张图片,控制台里却出现了几十条不同的缓存记录。
原因:CDN 缓存默认按完整 URL 区分。统计分析工具的 utm_* 参数、前端加的时间戳、随机的追踪参数,都会让"同一个文件"变成"无数个 URL",每个 URL 都要单独回源一次。
解决:在 CDN 配置里开启"忽略指定查询参数缓存",把 utm_*、timestamp 这类参数从缓存键里剔除。治本的办法是规范前端:资源 URL 不携带无意义参数。
原因三:更新太勤,刷新太狠
现象:每次发版或改图之后,命中率断崖式下跌,好几天才爬回来。
原因:不少站长习惯"改完就全量刷新目录",一次刷新把整个路径下的缓存全清空。改一张图,代价是全站静态资源重新回源。
解决:两条路。一是用版本化文件名(style.a1b2c3.css 这种带哈希的命名),内容一变文件名就变,旧缓存自然失效,根本不需要手动刷新;二是确需刷新时用精准刷新(只刷单个 URL),把全量目录刷新留给出厂级别的大改版。
原因四:长尾内容太多,冷内容挤掉热内容
现象:命中率曲线平稳但就是不高,缓存容量占用却接近满载。
原因:站点内容多、访问分散,大量文件只被访问一两次。边缘节点的缓存空间有限,这些"冷内容"不断写入又不断被驱逐(淘汰),占着容量却没有贡献命中率,热门文件反而可能被挤出去。
解决:先分析访问日志,找出真正的热门资源,对它们做缓存预热,确保高峰前热点已在节点上;对长尾内容,权衡 TTL——如果可以接受,适当延长缓存时间减少驱逐频率。内容特别海量(比如图床、素材站)的场景,要接受命中率有天花板,把优化重点放在流量命中率上。
原因五:大文件的 Range 请求拉低统计
现象:视频、安装包这类大文件为主的站点,请求命中率怎么都上不去,但访客体验其实没毛病。
原因:播放器和大文件下载普遍使用 Range 请求(分段拉取),一个视频被切成几十段、由多个节点分片响应,统计上这些分段请求很容易被计为未命中——这是统计口径问题,不是真没缓存。
解决:确认 CDN 已开启 Range 回源缓存(分片缓存),让每一段都能被独立缓存和命中;统计评估时改看流量命中率,别被请求命中率吓到。这也是上一段说的"先分清口径"的典型场景。
原因六:源站响应头"帮倒忙"
现象:静态资源明明很稳定,CDN 却坚持每次回源。
原因:源站返回的头里带了 Set-Cookie、Vary: * 或 no-store。只要响应带 Set-Cookie,多数 CDN 出于安全考虑会直接放弃缓存——很多框架默认给所有响应都塞 Cookie,静态资源也被连坐了。
解决:静态和动态分离——静态资源走独立域名或独立路径,源站对这条路径明确不输出 Cookie、不输出 no-store。动静分离是 CDN 优化里收益最确定的一步。
排查顺序建议
六个原因别平均用力,按这个顺序查效率最高:
先确认统计口径(请求命中率还是流量命中率),排除大文件场景的误判;
抽查几个"本应缓存却回源"的请求,看源站响应头(原因一、原因六最常见);
再看缓存记录里的 URL 分布,有没有参数污染(原因二);
最后复盘更新和刷新习惯(原因三)与内容结构(原因四)。
顺带说一句账单视角:CDN 的费用跟着流量走,以 VMRack 的CDN为例,现在公测阶段每月赠 30GB 流量,超出部分 $0.005/GB,而命中率每提高一截,回源带宽和流量成本就能实打实降一截,这也是命中率值得反复优化的现实理由。博客图片这类静态资源的 CDN 配置实操,可以看 Tuio 小站的《通过对象存储搭建图床》,缓存规则和防盗链都有落地步骤;回源机制本身,之前在《自建CDN解决网站视频卡顿》里也展开过。
非常感谢您的耐心阅读!