通过配置缓存过期时间规则,可以精细化控制CDN节点的资源缓存时长,以平衡内容更新、访问性能与回源成本。此文档介绍缓存规则的工作原理、配置方法、验证、排障流程及最佳实践。
工作原理
请求到达CDN节点时,系统遵循以下决策流程(序号越小,优先级越高)决定是响应缓存副本,还是回源获取最新内容。
不缓存资源:源站响应
pragma:no-cache、cache-control:no-cache(或者no-store,或者max-age=0)时,CDN遵循源站的策略,完全不缓存资源。遵循控制台缓存规则:CDN控制台为指定目录或文件后缀名设置规则,且源站未配置上述不缓存规则,此时控制台缓存规则为最高优先级策略。
多条控制台缓存规则匹配时的优先级逻辑:
场景
优先级逻辑
示例
权重不同
权重值(1-99)大的规则优先生效。
规则A(目录
/image/,权重50)和规则B(后缀.jpg,权重90)都匹配image/a.jpg,则规则B生效。权重相同
先创建的规则优先生效。
为域名配置权重同为60的目录规则(
/static/)和后缀规则(.js),若目录规则创建时间早于后缀规则,则/static/app.js命中目录规则。请求命中某条缓存规则后,不再继续匹配其他规则。
默认情况下,若源站响应
Pragma: no-cache或Cache-Control: no-cache/no-store/max-age=0,CDN节点不缓存该资源。如果需要强制缓存资源,可以在控制台配置缓存过期时间时勾选忽略源站不缓存标头。
CDN遵循源站缓存策略:若请求未命中任何CDN控制台规则,或命中的规则开启了优选遵循源站缓存策略,此时CDN将遵循源站的HTTP响应标头。响应头的优先级由高至低为:
cache-control>expires>last-modified>ETag。响应头
CDN 如何处理
注意事项与示例
Cache-Control
优先用
s-maxage(CDN 缓存时长),其次max-age。示例:
s-maxage=86400, max-age=3600Expires
过期时间,仅当无
Cache-Control时生效。示例:
Expires: Wed, 21 Oct 2025 07:28:00 GMTLast-Modified
Last-Modified是一个时间戳,表示资源最后被修改的时间。缓存时间计算规则如下:
(当前时间-
last-modified)* 0.1,计算结果在10秒~3600秒及之间的,取计算结果时间;小于10秒的,按照10秒处理;大于3600秒的,按照3600秒处理。示例:
Last-Modified: Wed, 21 Oct 2023 07:28:00 GMTETag
ETag是服务器为每个资源生成的一个唯一标识符,通常是一个哈希值或版本号。ETag默认缓存10秒。示例:
ETag: "abc123"CDN不缓存策略:若没有命中CDN控制台的缓存规则,并且源站也没有返回
Cache-Control等缓存响应头,则CDN执行不缓存策略。
CDN仅对源站响应200, 203, 206, 300, 301, 308, 410状态码的请求执行缓存策略。如需缓存其他状态码的请求(例如404),需在 缓存配置 > 状态码过期时间 页面设置。
操作步骤
控制台(推荐)
CDN控制台的域名管理页,单击目标域名右侧的管理。
在缓存配置 > 缓存过期时间页面单击添加,配置缓存规则。

参数名
说明
默认值/示例
类型
支持按目录或文件后缀名指定资源范围。
• 目录:为路径下所有资源统一设置缓存规则。
• 文件后缀名:为指定类型的文件统一设置缓存规则。目录、文件后缀名
地址
根据所选类型填写:
• 目录:以/开头(如/static/),/可匹配所有路径,每次仅支持添加一条。
• 文件后缀名:输入一个或多个后缀,用英文逗号分隔(如jpg,png,css),区分大小写,不支持竖线(|)或其他符号。/static/、jpg,png,css过期时间
资源在CDN节点的缓存时长,最长3年。
• 不常更新的静态资源(如图片、安装包):建议 ≥ 1 个月。
• 频繁更新的静态资源(如 JS/CSS):建议设置为较短时间(如 1~7 天)。
• 动态内容(如 PHP/JSP):建议设为 0 秒(不缓存)。0 秒~3 年
优先遵循源站缓存策略
默认关闭。开启后,优先采用源站缓存策略,覆盖本规则配置。
关闭
忽略源站不缓存标头
开启后,CDN 将忽略源站返回的以下不缓存指令:
Cache-Control: no-store、no-cache、max-age=0,以及 Pragma: no-cache,仍按CDN控制台规则缓存。关闭
客户端跟随CDN缓存策略
开启后,CDN 会将自身生效的缓存策略(如
max-age=3600)通过响应头返回给客户端。关闭
强制内容重新验证
仅在过期时间设为 0 秒时生效。
• 关闭(默认,等同于缓存策略no-store):CDN节点不缓存文件,每次请求都需要回源获取内容。
• 开启(等同于缓存策略no-cache):CDN节点会缓存文件,但每次请求都需要回源验证缓存内容(304机制)。适用于需要实时验证但希望减少源站带宽压力的场景。关闭
权重
规则优先级,取值 1~99,数值越大优先级越高。当多条规则匹配同一资源时,权重值大的规则优先生效;若权重相同,先创建的规则优先生效。建议为具体路径或后缀设置高权重,为根目录
/设置低权重,以实现精细化控制。1~99
规则条件
可基于请求中的参数(如 Header、URL 参数等)进一步限定规则生效范围。默认不使用;如需配置,请通过规则引擎管理。引用规则条件时,按所关联规则条件的优先级匹配,而非按功能自身的配置顺序匹配。
不使用
API
调用BatchSetCdnDomainConfig接口,可以批量配置域名。更多功能参数的配置方法,敬请参考域名配置功能函数。
使规则变更立即生效
配置变更或新增规则,仅对新缓存的资源生效。变更前已缓存的资源,将继续沿用旧的缓存策略直至过期。
要使新规则立即对全网生效,必须手动清理已有缓存。如果是规则变更,通过刷新资源功能执行刷新操作;如果是新增规则,通过预热资源功能执行预热操作。
生效验证
配置完成后,可通过curl命令或浏览器开发者工具查看资源的HTTP响应标头,以判断缓存是否按预期工作。
1. 执行验证命令
在终端上执行以下命令进行测试。
curl -I "https://your.domain.com/path/to/file.jpg"2. 解读关键响应头
响应标头 | 常见值与解读 |
| 指示请求是否命中CDN缓存。 |
| 开启"客户端跟随CDN缓存策略"后,此标头会显示CDN传递给浏览器的缓存指令,如 |
| 资源在CDN节点上配置的缓存总时长,单位为秒。 |
应用于生产环境
版本化文件名(推荐):更新静态资源(如
style.css)时,使用带版本或哈希值的新文件名(如style-v2.css或style-a1b2c3d.css),并更新HTML中的引用。此方式无需手动刷新CDN缓存,可确保用户立即获取最新内容,是推荐的缓存更新方式。动静分离:为动态和静态资源使用不同域名或目录路径,并配置独立的、高权重的缓存规则,以避免策略混淆。例如,为
/static/目录下的所有资源设置长缓存,为/api/目录下的资源设置不缓存。善用浏览器缓存:开启"客户端跟随CDN缓存策略",可减少对CDN的重复请求,提升加载速度并节省CDN流量。
避免缓存时间过短:过短的缓存时间会导致CDN频繁回源,无法起到加速效果,反而增加源站的流量消耗和成本。
注意缓存时间过长:过长的缓存时间会导致客户端获取数据更新不及时。对于需频繁更新的内容,务必配合刷新缓存操作或使用版本化文件名。
HTTP协议缓存控制机制说明
在HTTP协议中定义了三种不同类型的协议头部来实现缓存控制相关的机制:
常见问题
修改缓存配置或源站内容更新后,如何确保用户立即访问到最新内容?
CDN缓存规则变更仅对新请求生效,已缓存的旧资源需手动清理。可执行以下操作:
刷新缓存:登录CDN控制台,进入域名管理 > 刷新预热页面,选择"URL刷新"或"目录刷新",输入需要更新的文件路径或目录,提交刷新任务。这将强制CDN节点删除旧缓存,下次访问时重新回源获取最新内容。
强制刷新:若常规刷新未生效,可调用
RefreshObjectCachesAPI 并将Force参数设为true进行强制刷新。清除本地缓存:若CDN已更新但浏览器仍显示旧内容,请清除浏览器缓存或使用无痕模式访问。
预防建议:对于频繁更新的静态资源(如HTML、JS、CSS),建议采用版本化文件名(如
style.v2.css)或在源站配置较短的缓存时间,减少手动刷新频率。
如何配置CDN仅缓存静态文件(如图片、CSS、JS),而让动态页面(如PHP、ASPX、API接口)直接回源?
建议采用"黑白名单"结合权重的配置方式:
创建高权重静态缓存规则:添加一条或多条规则,类型选择"文件后缀名",地址填写
jpg,png,css,js等静态后缀,设置较长的缓存时间(如1个月),权重设为较高值(如90~99)。创建低权重动态不缓存规则:添加一条规则,类型选择"目录",地址填写
/(根目录),缓存时间设为 0 秒(不缓存),权重设为较低值(如1~10)。针对特定动态路径优化:若某些动态路径(如
/api/或/wp-admin/)需要严格不缓存,可单独添加目录规则,路径设为该目录,缓存时间 0 秒,权重设为最高(如99),确保优先匹配。
注意:CDN无法完全绕过节点直接回源,即使缓存时间为 0,请求仍会经过CDN节点进行转发和鉴权。
配置缓存规则后,为什么测试请求仍然回源或未命中缓存?
可按以下步骤排查:
检查配置生效状态:确认控制台缓存配置状态显示为"成功"。
验证匹配优先级:若存在多条规则,确保目标路径命中的规则权重最高。例如,具体目录(如
/static/)的权重应高于根目录(/)的默认规则。检查源站响应头:若源站返回
Cache-Control: no-cache/no-store/max-age=0或Pragma: no-cache,且CDN未开启"忽略源站不缓存标头",CDN将遵循源站指令不缓存。建议开启该选项或调整源站配置。确认请求方法:使用
curl -voa(GET请求)而非curl -I(HEAD请求)进行测试,因为HEAD请求可能不会触发L1节点对资源体的真实缓存逻辑,导致误判为MISS。检查URL参数:若URL带参数,确认是否开启了"忽略URL参数"功能。若未开启,不同参数的URL被视为不同资源;若开启,则视为同一资源。
源站返回了 Cache-Control: no-cache 或 private,为什么CDN还是不缓存?如何强制CDN缓存?
默认情况下,CDN会遵循源站返回的 Cache-Control: no-cache/no-store/max-age=0、Pragma: no-cache 或 Cache-Control: private 等指令,导致资源不被CDN节点缓存。
若希望忽略源站的这些不缓存指令,强制按CDN控制台配置的规则进行缓存,请进入CDN控制台"缓存过期时间"配置页面,勾选忽略源站不缓存标头选项。开启后,CDN将忽略源站的不缓存头,依据控制台设置的过期时间缓存资源。
为什么视频播放或大文件下载时,日志中显示大量 206 状态码或多次回源?这正常吗?
这是正常现象。
206状态码:视频播放器或下载工具通常使用Range请求分段加载资源,每次请求部分内容,服务器返回 206 Partial Content。CDN命中缓存时也会返回 206。
流量费用:只要客户端向CDN发起请求并接收数据,无论是否命中缓存,均会计入CDN流出流量费用。
优化建议:确保开启CDN的Range回源功能,以便CDN节点可以按需从源站拉取片段并缓存,提高后续分段请求的命中率。同时,建议在客户端或源站配置合理的
Cache-Control头,利用浏览器本地缓存减少重复请求。
其他缓存相关常见问题,请参见缓存相关常见问题。