CDN 缓存命中率上不去?缓存规则、回源和刷新的原理一次讲清

简介: 命中率低、回源流量大,往往不是配置不够而是缓存规则配错了。这篇把 CDN 缓存规则的三层优先级、刷新与预热的机制和每日配额、以及命中率连着账单的省钱逻辑一次讲清,并附上边缘函数已停开的避坑提醒。

给网站套上 CDN 之后,大多数人的第一反应是"快了",第二反应是看账单和命中率报表:命中率怎么才 60%?回源流量怎么这么大?这两个数字其实是一件事的两面——命中率低,回源就多,源站带宽费用和回源请求费用都会跟着涨。这篇文章把阿里云 CDN 的缓存规则、回源逻辑和刷新预热机制拆开讲清楚,读完你可以对照自己的配置把命中率拉上来。

CDN 产品架构分层:高性能缓存与多级缓存调度

一、一个请求在 CDN 里是怎么走的

用户请求加速域名时,请求先落到离用户最近的 L1 边缘节点。边缘节点上缓存还没有这个资源(MISS),就去回源层节点要;回源层也没有,才真正回到源站拉取。资源沿着这条链逐层缓存,后续请求直接在边缘命中(HIT),不再打扰源站。

判断一个请求有没有命中缓存,不用猜,看响应头:

curl -I https://cdn.example.com/static/logo.png

返回头里找 X-Cache 字段:HIT 表示命中节点缓存;MISS 表示没命中、已经回源。再配合 Via 头可以看到整条链路上经过了哪些节点。排查命中率问题时,先拿几个典型 URL 各 curl 一次,比翻报表更直接。

二、缓存时长:三层规则的优先级

一个资源在节点上缓存多久,由三层配置决定,优先级从高到低:

优先级 来源 说明
1 源站缓存策略跟随开关 控制台开启「优先遵循源站缓存策略」后,源站返回的 Cache-Control 优先生效,覆盖控制台规则
2 控制台缓存规则 按目录或文件后缀名配置过期时间,配合权重决定多条规则谁生效
3 默认缓存时间 源站和控制台都没配时,默认 3600 秒(1 小时)

控制台规则的几个关键参数:

参数 取值 要点
类型 目录 / 文件后缀名 目录用路径前缀匹配,/ 匹配所有路径;后缀名不带点、逗号分隔、区分大小写
过期时间 0 秒 ~ 3 年 动态内容(PHP/JSP)建议 0 秒不缓存
权重 1 ~ 99 数值越大优先级越高;同权重先创建的生效;一条规则命中后不再往下匹配

另外三个开关容易搞反,单独说明:

  • 忽略源站不缓存标头:开启后,源站返回的 Cache-Control: no-store、no-cache、max-age=0 和 Pragma: no-cache 都会被忽略,仍按控制台规则缓存。源站框架默认输出 no-cache 头、导致 CDN 全部 MISS 的场景,就是靠这个开关救回来的。
  • 强制内容重新验证:只在过期时间为 0 秒时生效。开启后节点仍缓存文件,但每次请求都回源做 304 验证——适合"内容必须新鲜、但想省源站带宽"的接口类资源。
  • 客户端跟随 CDN 缓存策略:开启后节点会把生效的 max-age 返回给浏览器,控制客户端侧缓存。

还有一个隐藏规则:如果源站响应带了 ETag,客户端请求带 If-Match 且值匹配时,节点直接返回缓存内容;不匹配才回源。这个校验的优先级高于控制台配置的缓存规则。

三、缓存时长怎么配:一张建议表

资源类型 建议缓存时长 理由
图片、安装包等不常更新的静态资源 ≥ 1 个月 更新频率极低,缓存越久回源越少
JS、CSS 等频繁更新的静态资源 1 ~ 7 天 配合版本号命名使用
动态内容(PHP/JSP 等) 0 秒 缓存了就是事故

比配时长更重要的一个习惯:源站更新用版本号命名,不要同名覆盖。也就是 img-v1.0.jpg、app-v2.1.js,而不是改完内容还叫 img.jpg。同名覆盖时,旧缓存要等过期或手动刷新才会失效;版本号命名则天然生成新 URL,缓存零冲突。

还有一条官方明确提醒过的:控制台新增或修改缓存规则,只对之后新缓存的资源生效,已经缓存的旧资源继续沿用旧策略到过期。想让新规则立即对全网生效,必须手动执行刷新。

四、刷新与预热:机制和配额

刷新是让节点上的旧缓存失效,预热是高峰前把热点资源提前拉进节点。功能本身不收操作费,但刷新和预热引发的回源流量、回源请求,按源站自己的计费规则收(源站是 OSS 就收 OSS 回源费,是 ECS 就收带宽费)。批量操作放在业务低峰期执行。

操作方式 每日配额(每账号) 机制说明
URL 刷新 10000 条 直接删除指定文件缓存
目录刷新 每次 ≤100 条,单域名每分钟 ≤100 条 默认"标记刷新":回源时带条件请求,源站返回 304 就继续用旧副本
正则刷新 20 条 同为标记刷新,仅支持 4 种正则模式
URL 预热 1000 条,每次 ≤100 条 仅支持具体文件 URL,不支持目录;任务 5~30 分钟完成

两个容易踩的点:

  1. 标记刷新 ≠ 强制删除。控制台的目录刷新默认是标记过期,回源时源站返回 304 的话,旧缓存会继续被使用。源站同名覆盖更新后目录刷新却"刷不掉",就是这个原因。要无条件清除,需调用刷新 API 并把 Force 参数设为 true,强制刷新不做 304 校验。
  2. 预热只进回源层,不保证所有边缘节点立即命中。预热的作用是降低首次集中访问时的源站压力,用户首次访问某个 L1 节点仍可能 MISS,这不算预热失败。刷新和预热任务提交后 5~6 分钟全网生效,任务一旦提交无法中止。

CDN 内容分发到多节点,源站成本下降

五、计费要点:命中率直接连着账单

CDN 默认按流量计费,中国内地流量阶梯价从 0.24 元/GB(月累计 0~10TB 档)起步,用量越大单价越低,按小时出账、当月账户维度阶梯累进。HTTPS 请求数、QUIC、实时日志推送属于增值服务,用了才另行收费。价格以官方页面实时展示为准。

命中率每提升一个百分点,回源流量就少一截,源站那边的带宽和请求费用跟着降。所以缓存配置是少数"认真调一次、长期省钱"的配置项。

六、顺带说一个停开的坑:边缘函数

调研期间确认的一个事实,写出来帮后来人省时间:阿里云 DCDN 的边缘函数(EdgeRoutine)已于 2025 年 5 月 1 日 0 点起停止新用户开通,存量用户不受影响,官方建议有该需求的新用户改用边缘安全加速 ESA 的函数和 Pages 能力。如果你的方案里还写着"用 DCDN 边缘函数做 XX",先确认账号能不能开通,别做到一半发现入口都看不见。

七、避坑清单

  1. 命中率低先 curl 看响应头,确认 X-Cache 是 HIT 还是 MISS,再查缓存规则,别急着升配。
  2. 源站输出 no-cache 头导致全量回源的,开「忽略源站不缓存标头」;想以源站为准的,开「优先遵循源站缓存策略」,二选一想清楚再动。
  3. 动态接口务必配 0 秒不缓存规则,权重设高一点,防止被宽泛的目录规则误缓存。
  4. 根目录 / 规则配低权重当兜底,具体路径和后缀配高权重做精细化,权重相同先创建的生效。
  5. 静态资源一律版本号命名,杜绝同名覆盖,能省掉绝大多数刷新操作。
  6. 改完缓存规则要立即生效,必须手动刷新;只改规则不刷新,老资源会沿用旧策略到自然过期。
  7. 目录刷新"刷不掉"先想想是不是 304 标记刷新,确需强制清除走 API 加 Force=true。
  8. 批量刷新预热会打源站,挑低峰期、分批提交;预热选真正的热点大文件,小文件让首次访问自然填充即可。

把这三层理顺——缓存时长配对、版本号命名代替同名覆盖、刷新预热用在刀刃上——命中率报表会自己给出答案。CDN 本身的开通和配置入口,见阿里云 CDN 产品页。

阿里云 CDN:全球 3200+ 节点,静态资源加速首选

相关文章
|
云安全 安全 网络安全
|
7天前
|
JavaScript 安全 前端开发
Nodejs Brotli decoder 代码执行漏洞 (CVE-2026-111497)10629
Node.js发布安全更新修复Brotli解码器高危RCE漏洞(CVE-2026-111497),建议受影响版本用户立即升级。
2008 1
|
14天前
|
JSON 程序员 数据格式
最新版Notepad++下载、安装、配置保姆级教程(附官网安装包)
Notepad++ 是一款免费开源、轻量快速的 Windows 文本编辑器,支持多标签、语法高亮、代码折叠与宏录制,体积小、启动快、资源占用低,兼容 x64/x32/ARM 架构,是程序员和文字工作者的高效利器。
3195 0
|
13天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
2288 44
|
10天前
|
Web App开发 人工智能 前端开发
2026 年 AI 浏览器怎么选?Ego Lite、Tabbit、Chrome DevTools MCP 深度对比,开发者到底该用哪个?
2026年AI浏览器选型指南:Ego Lite专注多Agent协同(Mac优先),Tabbit国产首选,原生支持Windows与Codex控制;Chrome DevTools MCP非浏览器而是开发者利器,深度集成Console/Network/Performance调试能力,让AI真正“看懂并验证”前端代码。
1430 3
|
7天前
|
安全 应用服务中间件 Go
PHP2Shell 漏洞拆解:WordPress 与 nginx 为何中招
PHP2Shell 双 RCE 已遭在野利用:WordPress、Drupal 全在射程内,nginx 其实另有洞。拆成因与修复顺序
PHP2Shell 漏洞拆解:WordPress 与 nginx 为何中招
|
8天前
|
开发者 索引
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用
Open Plugin Market 是一个开放插件索引平台,收录800+优质DSH插件,支持分类浏览、智能推荐与随机发现。无需安装市场,粘贴索引地址即可一键接入,网页版直访 dshopen.org,助力小开发者被看见。(239字)
1737 1
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用
|
6天前
|
人工智能 Linux API
Magpie, 轻量本地AI网关!免费Token用不完!
Magpie 是开源AI编程模型调度网关,上线一月获1.8万Star。它通过本地高性能网关统一托管多平台API密钥、账号与免费额度,实现跨Agent的模型秒级切换、静默额度轮换与资源复用,显著降低碎片化管理成本。(239字)
Magpie, 轻量本地AI网关!免费Token用不完!
|
6天前
|
安全 程序员 应用服务中间件
PHP 被曝两大致命漏洞,请所有程序员抓紧做这件事!
PHP 官方发布了紧急安全更新,一口气修复了两个严重漏洞。如果网站和服务器用了 PHP 应该怎么处理?漏洞的原理是什么?本文给你讲清楚
701 0

热门文章

最新文章