接入CDN后,回源率和命中率是衡量缓存效果与源站压力的直接标尺;通过监控面板、日志分析和主动拨测,你能在业务受损前发现回源异常并定位到具体配置问题。
先厘清两类核心指标,别被“假命中”带偏
在聊具体操作前,必须先分清两个概念。回源率指的是用户请求中,最终落到源站的比例;命中率指的是CDN节点直接响应请求的比例,两者看似互为镜像,实际上因为“字节命中率”与“请求命中率”的存在,经常出现修正后的差异。
很多站长习惯只盯着请求命中率看,却忽略了字节命中率,举个例子:一个网页HTML文件只有20KB,命中率100%,但页面上的视频资源有2GB,全部回源,这时候请求命中率漂亮得很,源站出口带宽却被打满,行业共识认为,看命中状态必须结合请求命中率与字节命中率两个维度,缺一不可。
监控到底要看什么?三个层面:
- CDN服务商控制台的实时指标,包括QPS、回源带宽、命中率曲线
- 源站访问日志中的回源请求特征,包括UA、Referer、状态码分布
- 拨测工具的模拟请求结果,包括首次请求与二次请求的响应头差异
这三层数据结合起来,才能还原回源的真实全貌。
CDN接入后回源率高怎么办:三步定位法
回源率长期偏高,源站压力大,费用也蹭蹭上涨,别急着找服务商理论,按下面的顺序排查,多数问题出在自己的配置上。
第一步:区分“真回源”与“假回源”
打开CDN控制台的日志分析模块,导出最近24小时的回源日志,重点看请求的URL列表:
- 回源URL中如果大量出现
.jpg、.css、.js这类静态文件,属于真回源,说明缓存策略没生效 - 回源URL中如果出现
.php、.asp、.do等动态接口,属于正常回源,这部分本来就不该被缓存 - 还有一种“假回源”:请求带了
Authorization头或Cookie,CDN节点认为该请求不可缓存,连接被转发到源站,把日志中的请求头拉出来看一眼,基本就能确认
第二步:检查缓存键配置,去掉多余参数
缓存键是CDN识别缓存对象的依据,默认情况下,CDN会将URL中的查询参数(问号后面的部分)纳入缓存键计算,比如/product?id=1和/product?id=2会被当成两个完全不同的文件分别回源。
如果业务场景里,id没有影响,只是用于追踪来源,那这波回源就太冤枉了,进入CDN控制台的缓存配置项,将“忽略参数”开关打开,或指定忽略部分参数名,这一步处理完,静态资源的回源率往往能下降一半以上。
第三步:检查缓存过期时间刷新机制
源站更新了图片,CDN节点迟迟不刷新,于是有人手动刷新缓存,刷新完又导致大批量回源,这种“自伤式”操作在日活过万的站点上尤为明显。
缓存过期时间设置过短,回源频繁;设置过长,内容更新不及时,业内专家指出,静态资源建议设置7天以上的缓存过期时间,并在源站文件更新时,通过CDN控制台的URL预热接口主动推送,这样既能避免批量回源,也能保证内容新鲜度。
CDN回源日志怎么看:一眼识别问题请求
日志分析是排查回源问题的基本功,CDN提供商一般会在控制台提供日志下载功能,字段通常包括:时间、客户端IP、访问域名、URL、状态码、回源状态码、请求大小、命中标识。
命中标识是核心字段,各家服务商的字段名不太一样,有的叫HIT,有的叫hit,有的用表示,导出日志后,先按命中状态分组统计:
HIT占比高:整体缓存效果良好,回源率低MISS占比高:缓存未命中,需要看具体URL的特征EXPIRED出现频繁:缓存过期时间设置偏短BYPASS数量大:请求被强制绕过CDN,直接访问源站
实操中,推荐用Excel或命令行工具按URL维度聚合,假设日志文件名为access.log,在Linux环境下可以这样快速统计:
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -20
这条命令会输出访问次数最多的前20个URL及其请求次数,再结合命中标识判断哪些高频URL在持续回源,处理完毕后,清理一下统计结果,所有的MISS请求集中归类,基本就能找出问题的根源所在。
网站接入CDN后如何查看命中率:三处数据交叉验证
光盯控制台面板还不够,因为面板数据存在延迟和聚合误差,要拿到真实命中率,需要用三处数据相互验证。
控制台面板的统计口径
主流CDN服务商都会提供命中率曲线图,一般分为请求命中率和流量命中率两种口径,查询时注意时间粒度,推荐看1小时粒度的数据,太粗略会掩盖突发回源风险,太精细则噪音大。
响应头中的命中标记
向CDN节点发起一次HTTP请求,观察响应头中的X-Cache字段,如果返回HIT,说明请求由CDN节点直接响应;返回MISS则代表回源,这个字段无法伪造,是验证命中状态的黄金标准。
使用curl命令测试:
curl -I https://yourdomain.com/static/style.css
观察X-Cache: HIT或X-Cache: MISS,多次请求同一URL,如果一直是MISS,说明缓存没有写入,需要检查状态码是否为200,如果返回206,则可能是Range请求导致CDN无法完整缓存。
源站访问日志去重统计
最可靠的方式,还是直接检查源站日志,回源请求的IP段通常是CDN节点的IP段,与真实用户IP有明显区分,统计源站日志中,来自CDN回源IP段的请求占全部请求的比例,就是精准的回源率。
统计数据表明,源站日志中回源IP的连接数,正常情况应占总连接数的5%以下,如果长期超过10%,说明CDN配置存在明显问题,需要尽快介入排查。
多维度监控跑起来:从被动查看转向主动告警
人的精力有限,不可能时刻盯着控制台,建立主动告警机制,才是长期稳定维护之道。
设置阈值告警策略
每个CDN服务商的告警配置入口大同小异,选择域名维度,设置回源带宽阈值,建议低于源站带宽配额的60%,超过即触发告警,同时设置回源状态码5xx比例告警,当5xx请求占回源总请求的比例超过5%时,通过短信或企微机器人推送通知。
配置可用性拨测
拨测不是新概念,但很多运维只盯着服务器状态,忽略了CDN节点的可用性,用第三方拨测工具,模拟不同地区用户的访问请求,定时探测首包时间、HTTP状态码、下载速度,一旦某个地区CDN节点故障,拨测告警会先于用户投诉到达。
拨测频率不必太高,每5分钟一次已经足够,重点在于覆盖地理范围广,选择华北、华东、华南、西南各一个城市,加上香港节点,能覆盖大部分国内用户访问路径。
关注小比例状态码,而非仅仅关注大数字
业务正常运行的时候,回源日志里总会出现个别404、403、502状态码,只需要注意排查是否存在增长明显的异常状态码,就能提前发现源站程序或配置问题,监控的重点不在单点异常,而在于趋势变化。
CDN命中率多少算正常:分场景的合格线
很多新手爱问CDN命中率多少算正常,这问题没有统一答案,不同内容类型的差异极大,以下为多年来行业里总结的基本参考线:
类型 | 请求命中率参考 | 字节命中率参考 | 主要回源原因 |
|———|————–|————–|————|
| 静态图片/JS/CSS | 90%以上 | 95%以上 | 缓存过期、参数未忽略 |
| 流媒体点播 | 85%以上 | 90%以上 | 分片请求、防盗链参数变化 |
| 网页HTML | 70%-85% | 60%-80% | 动态内容、Cookie变化 |
| API接口 | 取决于业务设计,通常不高 | 同样取决于业务 | 响应头禁止缓存 |
对于纯静态站点,多数情况下命中率稳定在90%以上才算正常;带用户登录和个性化推荐的站点,命中率低于50%也未必是配置问题,而是业务形态决定的。
如果命中率长时间低于预期,检查源站响应头中的Cache-Control字段,CDN遵循源站指令,如果源站返回Cache-Control: private或no-store,CDN再聪明也不会缓存。
一个大促场景的完整排查复盘
某电商网站做年中促活动,提前一周接入CDN,活动第二天,运维发现源站带宽飙升到日常的3倍,登录CDN控制台,命中率曲线从90%掉到了40%。
排查过程:
- 导出日志发现,回源请求集中在商品图片URL,带上了一长串的
?x-oss-process=image/resize,w_750参数 - 参数里包含图片处理指令,每一次缩放比例变化都导致缓存键不同
- 在CDN控制台开启“忽略参数”,回源率立即下降
- 进一步调整缓存过期时间,将图片缓存从24小时拉长到7天
- 同时配置了源站带宽告警,设置阈值在正常值的1.5倍
处理后第二天,命中率回升至89%,源站带宽下降至活动前水平,整个排查耗时不到两小时,最大的收获是:回源问题绝大多数出在参数和过期时间上。
很多广州做跨境电商的朋友找我帮看CDN配置,十有八九都是这两个原因,先把这些基础排查做透,再去想更复杂的刷新策略,方向才正确。
监控数据的周期复盘与预案更新
CDN配置不是一劳永逸的,每个月花点时间做一次数据复盘,能明显降低突发故障的概率。
- 对比月度回源率均值,环比上升超过20%时,需要检查是否上线了新页面或改版了旧资源
- 汇总当月所有回源异常告警,分析是否有共同特征,比如集中在某个时段或某个目录
- 更新源站IP白名单,CDN节点IP段如果变化,及时在防火墙中放行
- 检查源站日志大小和备份策略,回源量增大时源站日志也会增长,磁盘满会导致源站直接宕机
常见问题速答
刚接入CDN时,回源率高是正常的吗?
正常,CDN节点初始状态没有缓存,冷启动阶段几乎所有请求都会回源,目的就是为了填充节点缓存,提升回源质量的关键在于重视预热操作,接入前一定要做全站URL预热,将首页和热门页面的静态资源提前推送至各节点,预热完成后,再引导一部分真实用户流量进入,让CDN节点逐渐积累缓存数据,这个过程通常需要数小时到一天,期间回源率高属于正常现象,不必过度担心。
如何确认缓存配置是否生效?
进入CDN控制台的缓存配置页面,查看现有规则列表,添加一条测试规则,例如对所有.jpg文件设置缓存1小时,保存后在命令行执行curl -I请求该图片,观察响应头中的X-Cache字段,如果显示MISS,等待两分钟再请求一次,如果变为HIT,说明配置生效,如果持续返回MISS,检查是否配置了“优先级”更高的规则,比如目录级别的规则覆盖了文件后缀级别的规则。
监控CDN的回源状况,核心就一句话:通过日志找规律,通过响应头看结果,通过告警看趋势,把这三个动作固化到日常运维里,回源和命中情况掌握起来并不难。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/644258.html





