如果您发现加速域名的缓存命中率突然下降,可以检查是否存在以下某个情况:
背景
內容分发网络是由遍布全国各省份、覆盖各运营商的海量缓存节点组成。通过将站点内容分发至靠近用户的缓存节点,使得用户可就近快速获取所需内容,从而有效地解决公网拥塞、网络延迟等问题,优化用户访问体验。因此,如果节点缓存的內容越多,加速域名的内容分发性能就越好,同时还可以减轻源站的压力。
您可以通过 CDN 的 命中率指标 来查看加速域名下命中缓存的请求比例。
缓存命中率包括请求命中率和流量命中率:
提升缓存命中率的方法
业务场景 | 问题原因 | 解决方式 | 配置方法 |
|---|---|---|---|
短时间内,大量请求并发访问相同的静态资源。如新闻热点,大型运营活动,新版本安装包发布等。 | 由于资源未被 CDN 缓存,触发了大量的回源请求,导致缓存命中率下降。 | 在活动开始前,先将资源预热到 CDN 的缓存节点。在活动开始后,缓存节点就能直接响应用户请求,从而提高缓存命中率,减少回源请求。 | |
源站上的静态资源在 CDN 缓存中很快就过期失效了。 | 可能存在以下某个原因:
缓存过期后,相同资源的请求就会触发回源请求,导致缓存命中率下降。 | 对于更新频率低的静态文件,例如图片和应用安装包,建议将缓存时长设置为 1 个月以上。 对于更新频率高的静态文件,例如 HTML,JavaScript,CSS 文件等,可以根据实际情况设置一个较短的缓存时长。 | |
请求 URL 中的查询参数不同,但是请求的资源相同。 | 默认情况下,查询参数是区分缓存文件的因素之一。如果某个查询参数本身不是用来区分文件的,例如是用来鉴权的,那么包含该查询参数的请求就会频繁触发回源请求,导致缓存命中率下降。 | 配置缓存键值,指定在缓存时需要去除的查询参数。 | |
用户下载一个应用安装包或者观看某个视频,在中途取消了下载或者在中途取消了视频的播放。 | 默认情况下,CDN 向源站请求的是完整文件,即使用户只是请求文件的某个分片。由于 CDN 节点从源站下载的文件大小大于用户请求的分片大小,导致缓存命中率下降。 | 如果您加速域名的业务类型是下载或点播,建议您启用 Range 回源。 | |
不同加速域名的源站配置是相同的,分发的资源也是相同的。 | 默认情况下,缓存中的文件是对加速域名而区分的,一个缓存文件仅归属于一个加速域名。在多个加速域名对接相同源站的场景下,对于相同的文件,每个加速域名下该文件的请求都会触发一个回源请求。这增加了源站的压力。 | 对源站配置相同的加速域名设置共享缓存。建议将共享缓存的目标域名设置为访问量较大的那个加速域名。 | 要启用共享缓存,请 提交工单。 |
源站响应未包含 Cache-Control 或 Expires 头部。虽然配置了缓存规则,但是 CDN 依然不缓存请求的文件。 | 缓存规则中默认的缓存策略是 "遵循源站"。也就是说,如果源站响应未包含 Cache-Control 或 Expires 头部,CDN 不缓存请求的文件,始终从源站获取,导致缓存命中率下降。 | 在缓存规则中将缓存策略修改为 "遵循源站-补充缓存(开)" 或 "CDN 缓存-强制缓存"。 | |
其他 | 除了以上几种常见的命中率优化措施,我们还提供了其他措施,例如合并回源,边缘预热等,可以为您的业务场景进行配置。 | 请 提交工单。 |
CDN 中预设的缓存策略
预设缓存策略为 "遵循源站",对所有文件生效,优先级最低,并且删除。"遵循源站" 指示在以下情况下,CDN 不缓存请求的文件:
Cache-Control 或 Expires 头部。Cache-Control 是以下任意值:
Expires 所指示的时间早于当前时间。预设缓存策略确保了任何请求都能匹配到一个缓存策略。
如果预设缓存策略无法满足您的要求,您可以配置其他缓存策略,说明如下:
缓存策略 | 策略配置 | 缓存行为 |
|---|---|---|
遵循规则 | 强制缓存(开) | 始终缓存文件,并遵循规则中的缓存时长。 |
强制缓存(关) |
| |
遵循源站 | 补充缓存(开) |
|
补充缓存(关) |
| |
不缓存 | 始终不缓存文件。 |
关于详细的缓存行为描述,参见 缓存规则详细描述。
默认情况下不会。CDN 的缓存策略仅对源站响应码为 2xx 的文件生效。但是您可以配置 状态码缓存 来对 4xx 和 5xx 的状态码进行缓存。
不支持。您能设置的最长缓存过期时间为 365 天。CDN 节点会定期删除访问量较少的缓存资源。
在 CDN 的响应中,X-Response-Cache 头部指示请求是否命中了缓存。
edge_hit:表示命中缓存。miss:表示未命中缓存。您也可以通过 配置 HTTP 响应头 来获取 cdn_cache_status 变量的值。该变量指示了请求是否命中了缓存。
对于时效性要求不高的文件,您可以采用以下方法:
对于时效性要求高的文件,您可以采用以下方法:
如果源站返回 301/302 状态码,默认情况下,CDN 会将该状态码发送给客户端,让客户端去处理。如果重定向后的文件是静态的,建议您 启用回源重定向跟随。启用后,当源站返回 301/302 时,CDN 会尝试获取重定向后的文件。如果获得了目标文件,CDN 根据缓存规则来缓存该文件,并将该文件返回给客户端。这样可以有效提升在源站返回 301/302 时的用户体验。
先检查加速域名的 回源 HOST 配置是否正确。如果源站上存在多个站点,您需要通过回源 HOST 指定回源请求需要访问的实际站点。默认情况下,回源 HOST 与加速域名相同。
如果 "回源 Host" 的配置正确但问题依旧存在,请 提交工单。
示例说明
源站为 www.test.com。该源站上提供服务的实际站点是 img.test.com。在这个情况下,如果您未将 回源 Host 设置为 img.test.com,源站的请求就会收到 404 响应。
支持。CDN 的源站类型可以是 火山引擎 TOS,也可以是以下任意第三方对象存储服务:
参见 新增源站。
回源重试发生时的源站选择逻辑
当 CDN 无法连接某个源站时,会基于以下规则来选择切换到的源站:
"不可用源站" 列表
如果连续 10 次都无法与某个源站建立 TCP 连接,CDN 会将该源站的 IP 地址添加到 "不可用源站" 列表中。
在尝试与某个源站建立 TCP 连接前,CDN 会检查 "不可用源站" 列表。如果该源站的 IP 地址在列表中,CDN 会同时进行以下操作:
问题描述
在以下场景中,当站点 B 接入 CDN 后,您在 TOS 存储中桶中更新了 CORS 配置。但是该配置没有生效。
问题原因
当用户第一次访问站点 B 上的某个文件时,CDN 向 TOS 存储桶请求并缓存该文件。与文件一起被缓存的还有源站的响应头。然后 CDN 将该文件与源站响应头一起发送给用户。如果存储桶上有 CORS 配置,源站响应头会包含 Access-Control-Allow-Origin 头部。
如果您更新了源站上的 CORS 配置,新配置不会更新到 CDN 的缓存。用户再次请求该文件时,CDN 发送给用户的是缓存的文件以及缓存的源站响应头,不是源站最新的响应头。如果缓存中的文件过期了但是回源校验的结果是源站上该文件未过期,那么 CDN 发送给用户的内容中依然不包含源站最新的响应头。
解决方案
在 CDN 中,通过 HTTP 响应头部配置 设置与源站相同的 CORS 配置。具体配置如下:
https://www.example.com。Access-Control-Allow-Origin 响应头仅包含用户请求中 Origin 头部中的 URL,您可以设置 跨域校验 为 开启。当客户端请求由于 访问控制配置拦截 或 限速 等原因受阻时,CDN 会在 HTTP 响应中默认新增 X-Exception-Info 响应头,以协助您快速排查并定位异常原因。
说明
X-Exception-Info 响应头仅在发生此类异常请求时返回,正常请求的响应中不会包含此头部。
异常响应头示例
如下示例所示,CDN 响应头中包含了 X-Exception-Info: deny by area access rule,表明该请求被您的“地域访问控制”规则拦截。
Server: Byte-nginx Content-Type: text/html; charset=utf-8 Content-Length: 26 Connection: keep-alive Age: 185 Cache-Control: max-age=3600 X-Bdcdn-Cache-Status: TCP_HIT X-Powered-By: PHP/5.4.16 X-Request-Id: f984be27e6cfef3ac5238d2231dad7fc X-Request-Ip: 120.234.91.233 X-Response-Cache: edge_hit X-Response-Cinfo: 120.234.91.233 X-Tt-Trace-Tag: id=5 Date: Thu, 15 Aug 2024 07:15:57 GMT via: cache07.gzcm06 X-Exception-Info: deny by area access rule
常见异常类型与响应信息对照表
如果异常是由于您的域名配置(如访问控制策略或流量检测等)引起的,您可以根据下表中的响应信息排查对应的配置项:
异常类型 |
|
|---|---|
地域访问控制 | deny by area access rule |
禁用 HTTP Method | deny by method rule |
IP 黑白名单 | deny by ip access rule |
Referer 黑白名单 | deny by referer access rule |
UA 黑白名单 | deny by ua access rule |
Origin 黑白名单 | deny by origin access rule |
自定义头部黑白名单 | deny by customiza access rule |
自定义拦截规则 | deny by request block rule |
URL 鉴权 | deny by url auth |
远程鉴权 | deny by remote url auth |
下载限速 | rate limit by download speed limit |
下载限速(规则引擎) | rate limit by rule engine |
拒绝访问(规则引擎) | deny by rule engine |
流量检测-限速 | rate limit by flow detection |
流量检测-拦截 | deny by flow detection |
流量检测(高危 IP 情报库) | deny by flow detection (high risk IP) |