问题描述
缓存是CDN提供的最重要的一个功能, 终端用户仅需要访问最近的CDN节点即可获取静态内容, 并缓解源站的压力, 提升终端用户的访问体验。 所以我们建议接入CDN的域名,都需要根据业务的实际情况,设置缓存策略; 如果不设置任何缓存策略,会降低命中率,增大回源压力, 减少使用CDN的收益。
解决方案
腾讯提供了动态加速ECDN和静态加速CDN两种解决方案。基于优化效果及成本考虑, 建议用户根据业务情况,把服务进行动静分离, 分别进行加速。CDN节点的静态缓存对象有如下3种:
•静态资源缓存:图像,文本,视频等非动态产生的资源
•访问头部缓存:保持源站回源头部和缓存服务器服务头一致
•状态码缓存:缓存非200的状态码,并由CDN 节点直接响应,减轻源站压力。
其中『静态资源缓存』是CDN发挥作用的最重要的功能,建议客户按业务需求设置。对于静态资源缓存控制主要有2个方面:
- URL缓存键规则配置
- 静态资源节点缓存时间
1.查看静态资源缓存配置(缓存键规则, 节点缓存过期配置)
点击『域名管理』--》选中『缓存配置』tab页面, 其中"缓存键规则配置"就是控制什么样的URL进行缓存, "节点缓存过期配置"用来控制这些资源在CDN节点上的缓存时间。
2.URL缓存键规则配置
url缓存规则配置有3个要素
- 类型 内容
- 忽略参数(不忽略,全忽略,保留指定参数)
- 忽略大小写(当前固定否,暂不支持改动,资源 URL 路径中大小写差异与资源内容有关,则可关闭忽略大小写配置)
忽略参数设置建议:
- 用户通过 URL 进行资源访问时,可能会携带一些具有特殊作用的参数,对资源进行区分。这种场景下需要选择“不忽略”,由完整的 URL 作为缓存键
- 如果参数对区分资源没有作用, 比如在音视频场景下,若使用时间戳签名参数来进行访问认证。这种场景下需要选择“全部忽略”,由“?”之前的链接作为缓存键。节点仅缓存一份资源,即使时间戳签名不断变化,通过签名校验后可直接命中缓存
配置指南及相关的配置约束详情见配置约束
3.CDN缓存过期时间配置
接入CDN以后,默认情况下会自动添加一个缓存的默认规则, 但这个不一定符合业务需求, 业务可以删除默认规则,自动添加符合自己业务情况的配置
节点缓存过期时间配置有2个要素
- 类型 内容
- 缓存选项(缓存,遵循源站,不缓存)
CDN缓存过期时间配置支持基础模式和高级模式,基础模式里只能设置缓存的时间,高级模式里的缓存选项还可以设置不缓存或遵循源站。存量若为节点缓存过期配置(旧)(即基础模式),按高级模式配置提交后将全面升级,不可恢复至原基础模式。
选项1:缓存
这里注意有一个『强制缓存』选项。
- 若“强制缓存”选择“是”,则 CDN 节点缓存资源的时间按照此处配置的时间。
- 若“强制缓存”选择“否”且源站的 Cache-Control 字段为 no-cache/no-store/private,即使配置了缓存时间,CDN 节点也不缓存资源。
选项2:遵循源站缓存
如果选择遵循源站的缓存,并且源站返回的Response Header中有Cache-Control 则:
- 若 Cache-Control 字段为 max-age,CDN 节点缓存资源的时间按照 max-age 值。
- 若 Cache-Control 字段为 no-cache/no-store/private,CDN 节点不缓存资源。
如果选择遵循源站的缓存,并且源站返回的Response Header中没有Cache-Control或Expires字段,并且没有开启启发式缓存,则CDN 节点不缓存资源。
如果选择遵循源站的缓存,并且源站返回的Response Header中没有Cache-Control或Expires字段,并且开启启发式缓存,则按照启发式缓存的规则进行缓存。
启发式缓存默认配置:如果源站响应头存在 Last-Modified,则默认缓存时间=(当前时间 - Last-Modified)* 0.1,如果源站响应头不存在 Last-Modified,则默认缓存时间为600s。
启发式缓存自定义策略:支持您自定义缓存时间
选项3:不缓存
配置了不缓存,则不缓存
注意事项
- 目前缓存有文件大小限制:32G 以内。若超过此限制,将无法正常缓存,会回源获取资源。
- 若未配置任何规则或请求未命中配置的规则时,默认遵循以下平台策略:
- 当用户请求您某一业务资源时,若源站对应的 HTTP Response Header 中存在 Cache-Control 字段,则遵循该 Cache-Control 。
- 若源站对应的 HTTP Response Header 中无 Cache-Control 字段,则:CDN 节点默认对该资源缓存600s。
更多关于节点缓存的配置约束见官方介绍节点缓存配置