【最佳实践】巡检项:内容分发网络(CDN)未配置缓存规则

2022-04-28 20:50:35 浏览数 (2)

问题描述

缓存是CDN提供的最重要的一个功能, 终端用户仅需要访问最近的CDN节点即可获取静态内容, 并缓解源站的压力, 提升终端用户的访问体验。 所以我们建议接入CDN的域名,都需要根据业务的实际情况,设置缓存策略; 如果不设置任何缓存策略,会降低命中率,增大回源压力, 减少使用CDN的收益。

解决方案

腾讯提供了动态加速ECDN和静态加速CDN两种解决方案。基于优化效果及成本考虑, 建议用户根据业务情况,把服务进行动静分离, 分别进行加速。CDN节点的静态缓存对象有如下3种:

•静态资源缓存:图像,文本,视频等非动态产生的资源

•访问头部缓存:保持源站回源头部和缓存服务器服务头一致

•状态码缓存:缓存非200的状态码,并由CDN 节点直接响应,减轻源站压力。

其中『静态资源缓存』是CDN发挥作用的最重要的功能,建议客户按业务需求设置。对于静态资源缓存控制主要有2个方面:

  1. URL缓存键规则配置
  2. 静态资源节点缓存时间

1.查看静态资源缓存配置(缓存键规则, 节点缓存过期配置)

点击『域名管理』--》选中『缓存配置』tab页面, 其中"缓存键规则配置"就是控制什么样的URL进行缓存, "节点缓存过期配置"用来控制这些资源在CDN节点上的缓存时间。

静态资源缓存控制配置静态资源缓存控制配置

2.URL缓存键规则配置

缓存键规则配置缓存键规则配置

url缓存规则配置有3个要素

  • 类型 内容
  • 忽略参数(不忽略,全忽略,保留指定参数)
  • 忽略大小写(当前固定否,暂不支持改动,资源 URL 路径中大小写差异与资源内容有关,则可关闭忽略大小写配置)

忽略参数设置建议:

  • 用户通过 URL 进行资源访问时,可能会携带一些具有特殊作用的参数,对资源进行区分。这种场景下需要选择“不忽略”,由完整的 URL 作为缓存键
  • 如果参数对区分资源没有作用, 比如在音视频场景下,若使用时间戳签名参数来进行访问认证。这种场景下需要选择“全部忽略”,由“?”之前的链接作为缓存键。节点仅缓存一份资源,即使时间戳签名不断变化,通过签名校验后可直接命中缓存

配置指南及相关的配置约束详情见配置约束

3.CDN缓存过期时间配置

接入CDN以后,默认情况下会自动添加一个缓存的默认规则, 但这个不一定符合业务需求, 业务可以删除默认规则,自动添加符合自己业务情况的配置

缓存时间配置缓存时间配置

节点缓存过期时间配置有2个要素

  1. 类型 内容
  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:不缓存

配置了不缓存,则不缓存

不缓存不缓存

注意事项

  1. 目前缓存有文件大小限制:32G 以内。若超过此限制,将无法正常缓存,会回源获取资源。
  2. 若未配置任何规则或请求未命中配置的规则时,默认遵循以下平台策略:
  • 当用户请求您某一业务资源时,若源站对应的 HTTP Response Header 中存在 Cache-Control 字段,则遵循该 Cache-Control 。
  • 若源站对应的 HTTP Response Header 中无 Cache-Control 字段,则:CDN 节点默认对该资源缓存600s。

更多关于节点缓存的配置约束见官方介绍节点缓存配置

0 人点赞