You need to enable JavaScript to run this app.
导航

配置缓存规则

最近更新时间2024.03.21 15:48:44

首次发布时间2022.02.09 10:16:58

本文档介绍火山引擎内容分发网络的缓存流程以及如何通过缓存规则影响内容分发网络的缓存行为。缓存规则的作用如下:

  • 在内容分发网络缓存文件时,缓存规则指定了内容分发网络如何在边缘节点缓存来自源站的文件。
  • 在内容分发网络收到用户请求时,缓存规则指定了是否需要在缓存中尝试查找匹配请求的文件。

工作原理

收到用户请求时

当收到用户请求时,内容分发网络会根据缓存规则的优先级,由高到低依次将用户请求与缓存规则匹配。在匹配到一条规则后,内容分发网络就停止匹配其余的规则了。匹配的那条规则会有以下某个配置:

  • 不要缓存文件。此时,内容分发网络直接向源站请求该文件。在收到文件后,内容分发网络将该文件响应用户请求,不会缓存该文件。参见 配置说明 中 "过期时间" 配置的说明。

  • 文件需要被缓存。此时,内容分发网络会根据 缓存键值规则 检查请求是否命中了缓存。检查结果可以是:

    • 请求命中了缓存,且缓存的文件未过期。此时,内容分发网络将缓存中的文件响应用户请求。

    • 请求命中了缓存,但是缓存中的文件已过期。此时,内容分发网络会进行 回源校验

    • 请求未命中缓存。此时,内容分发网络会向源站请求该文件。在收到文件时,内容分发网络将该文件响应用户请求,同时根据该缓存规则的配置缓存该文件。

缓存文件时

当收到来自源站的文件时,对于匹配的缓存规则,内容分发网络会根据缓存规则中所配置的缓存策略来缓存该文件。您可以在缓存规则中指定以下缓存行为的配置:

缓存优先策略
CDN 关联逻辑
缓存行为缓存时长
CDN缓存强制缓存(开)忽略源站响应头指定的不缓存,始终缓存文件。遵循规则中配置的 过期时间
强制缓存(关)不忽略源站响应头指定的不缓存。未指定缓存行为时,不缓存文件。
遵循源站补充缓存(开)遵循源站响应头的配置。未配置缓存行为时,缓存文件。遵循响应头指定的缓存时长。未配置缓存行为时,遵循规则中配置的 过期时间
补充缓存(关)遵循源站响应头的配置。未配置缓存行为时,不缓存文件。遵循响应头指定的缓存时长。

关于详细的缓存行为描述,参见 缓存规则详细描述

源站响应头包含 no-cache 时

为了满足大部分用户的需求,对于源站响应头包含 Cache-Control: no-cache 的文件,内容分发网络调整了默认缓存行为。

如果您的加速域名收到了这类文件的请求,内容分发网络的默认缓存行为如下:

  • 如果该加速域名是在 2024年3月15日之前(不包含 3月15日)创建,内容分发网络默认缓存请求的文件。但是该缓存文件会立刻被标记为已过期。对于之后收到该文件的请求,内容分发网络会进行 回源校验
  • 如果您的加速域名的创建日期晚于 2024年3月15日(包含 3月15日),内容分发网络默认不会缓存请求的文件。

内容分发网络默认的缓存行为可以被您创建的缓存规则中指定的缓存行为覆盖。

关于预设缓存规则

在您添加域名时,內容分发网络会默认为您添加以下缓存规则。您可以修改其配置。

  • 缓存优先策略CDN 缓存关联逻辑强制缓存(关),缓存时长是 30 天。该规则对所有文件生效。

域名创建后,您可以修改或者删除该规则。
alt

域名创建后,缓存规则列表中会额外包含一条规则。该规则对没有匹配其他规则的文件生效。您无法修改或者删除该规则。同时,这条规则的优先级始终是最低的,无法调整。这条规则确保了任何文件都可以匹配到一条规则。

创建缓存规则

如果您对站点上某些文件有定制化的缓存要求,您可以创建缓存规则。

  1. 登录 火山引擎内容分发网络控制台
  2. 在左侧导航栏,点击 域名管理
  3. 域名管理 页面,找到需要配置的域名,点击 管理
    页面上方的筛选条件和搜索框可以帮助您快速找到要配置的域名。
  4. 在域名页面上,点击 缓存配置 页签。
  5. 在页面右上方,点击 编辑配置
  6. 缓存规则 下方,点击 添加缓存规则
  7. 根据 配置说明 进行设置。
  8. 配置完成后,在页面右上方,点击 提交编辑

alt

配置说明

配置说明
优先级表示规则的优先级。数字 1 的规则优先级最高。在收到请求时,内容分发网络按规则的优先级,从高到低尝试将请求与规则匹配。如果请求匹配了某一条规则,内容分发网络就停止匹配其余规则。您可以通过拖拽调整规则的优先级。

规则类型

表示规则对哪个类型的对象生效。该配置有以下选项:

  • 文件后缀:表示文件后缀,用于匹配请求文件的扩展名。

  • 目录:表示文件目录,用于匹配请求文件所在的目录。

  • 文件全路径:表示文件路径,用于匹配请求文件的路径。

规则

表示规则的内容,长度不能超过 1,024 个字符,不能包含以下字符:

  • 连续斜杠(//)、空格、美元符号($)、问号(?)、Delete(ASCII code 127)。

同时,

  • 如果规则类型是 文件后缀,规则内容必须是一个或者多个以分号(;)分隔的文件后缀。文件后缀无需以句点(.)开头。例如:png;txt

  • 如果规则类型是 目录,规则内容必须是一个或者多个以分号(;)分隔的目录路径。目录路径必须以斜杠(/)开头和结尾。例如:/chs/foods/;/us/birds/

  • 如果规则类型是 文件全路径,规则内容必须是一个或者多个以分号(;)分隔的文件路径。文件路径必须以斜杠(/)开头,可以包含星号(*)用来表示一个或者多个字符。例如:/chs/foods/local*sets;/us/birds/chickadee

忽略大小写指定 规则 中的匹配条件是否是大小写敏感的。默认设置是 关闭,表示大小写敏感。 例如:您创建了一个文件后缀规则,匹配条件是 png;txt忽略大小写关闭。此时,该规则可以匹配 URL 是 HTTPS://www.EXAMPLE.com/image.png 的请求,但是不能匹配 https://www.example.com/image.PNG

缓存优先策略

指定一个缓存策略。 该配置有以下选项:

  • CDN 缓存:表示内容分发网络对指定文件的缓存行为是基于您配置的缓存规则。

  • 跟随源站:表示内容分发网络对指定文件的缓存行为是基于源站响应头指定的缓存行为。

实际的缓存行为是在 CDN 关联逻辑 配置中指定的。

CDN 关联逻辑指定内容分发网络在 缓存文件时 的行为。

过期时间

设置文件的缓存时长。您需要指定一个时间单位,然后设置一个值。

如果您输入 0,表示内容分发网络不对匹配条件的文件进行缓存。对于配置为不缓存文件的规则,建议您设置其优先级高于其他规则。

缓存规则详细描述

缓存优先策略CDN 关联逻辑缓存行为缓存过期时间
CDN缓存强制缓存(开)表示内容分发网络始终缓存文件。遵循规则中配置的 过期时间

强制缓存(关)

  • 在以下情况下内容分发网络不会缓存文件。

    • 源站响应包含 Cache-Control: no-storeCache-Control: private头部。
  • 在其他情况下,内容分发网络缓存文件。

遵循源站

补充缓存(开)

  • 在以下情况下内容分发网络缓存文件。

    • 源站响应包含 Cache-Control: max-ageExpires 头部。

    • 源站响应不包含 Cache-ControlExpires 头部。

  • 在其他情况下,内容分发网络不会缓存文件。

如果包含 Cache-Control: max-ageExpires 头部,遵循响应头指定的缓存时长。

如果不包含 Cache-ControlExpires 头部,遵循缓存规则中配置的 过期时间

补充缓存(关)

  • 在以下情况下内容分发网络缓存文件。

    • 源站响应包含 Cache-Control: max-ageExpires 头部。
  • 在其他情况下,内容分发网络不会缓存文件。

遵循响应头指定的缓存时长。

说明

在以下情况下,除非您指定 强制缓存(开),内容分发网络不会缓存指定的文件:

  • 源站响应包含 Cache-Control: max-age = 0 头部或者包含的 Expires 头部所指定的时间早于当前时间。

更多信息

文件不缓存的情况

在以下情况下,无论缓存规则如何配置,内容分发网络都不会对源站响应的文件进行缓存:

  • 源站响应中 Content-Length 头的值为 0。

  • 用户请求所使用的方法既不是 GET 也不是 HEAD。

  • 源站的响应状态码不是 2xx,并且您未配置 状态码缓存

  • 对于 HEAD 请求,源站响应中包含 Transfer-Encoding:chunked 响应头。

如何判断缓存的文件过期

在收到一个请求时,假设该请求匹配的规则指示请求的文件需要被缓存,并且该请求命中了缓存。此时,内容分发网络遵循以下步骤判断缓存的文件是否已过期:

  1. 计算该文件已缓存的时长,精确到秒。计算方式是:已缓存时长 = 请求时间戳 - 该文件被缓存的时间戳

  2. 根据匹配规则的配置获取该文件的缓存 TTL。

如果 已缓存时长 > TTL,则表示缓存的文件已过期。如果 已缓存时长 <= TTL,则表示缓存的文件未过期。

强制缓存更新

假设内容分发网络缓存中的某个文件还未过期,但是在源站上该文件已经有了更新。您需要用户获取该文件的最新版本。

此时,您可以在内容分发网络里对该文件进行 刷新 操作。刷新操作强制将该文件标记为已过期。之后,如果用户请求该文件,内容分发网络会进行 回源校验。获取到更新文件后,内容分发网络将更新的文件响应用户请求并缓存该更新文件。

回源校验

当一个缓存文件过期后,如果收到了该文件的请求,内容分发网络会向源站校验该文件是否有更新。回源校验的流程如下:

  • 如果该文件的源站响应包含 Last-Modified 字段或者 ETag 头部,内容分发网络会在回源请求中包含用于文件校验的头部。ETag 的优先级高于 Last-Modified

    • 如果源站响应包含 ETag,回源校验请求中会包含 If-None-Match 头部。该头部的值就是 ETag 的值。

    • 如果 ETag 不存在但是 Last-Modified 存在,回源校验请求中会包含 If-Modified-Since 头部。该头部的值就是 Last-Modified 的值。

  • 如果缓存文件的源站响应中既没有包含 Last-Modified,也没有包含 ETag 头部,内容分发网络就直接向源站请求该文件。在收到文件后,内容分发网络会将文件响应用户请求并缓存该文件。

  • 关于源站的响应状态码:

    • 如果状态码是 304,表示该文件在源站没有更新。此时,内容分发网络将缓存的文件响应用户请求。如果之后再次收到了该文件的一个请求,内容分发网络会重复执行回源校验流程。

    • 如果状态码是 200,表示该文件在源站有更新并且响应正文中包含了最新的文件。此时,内容分发网络会将更新的文件响应用户请求并在缓存中替换已有的文件。