CDN节点从源站获取资源时,源站会返回响应状态码,您可以在阿里云CDN上配置状态码缓存时间,当客户端再次请求相同资源时,由CDN直接响应状态码,不会触发回源,减轻源站压力。当状态码超过设置的缓存时间,会重新触发回源。
适用场景
配置状态码过期时间主要适用于源站响应了异常状态码的情况下,用于指定CDN节点上执行的缓存处理动作。
正常情况下CDN节点成功从源站获取到所请求的资源,即源站响应了2xx状态码时,会按照阿里云CDN默认缓存规则及优先级进行缓存。如果源站无法迅速响应所有状态码(例如非2xx状态码),且不希望所有请求全部由源站响应,那么可以配置状态码过期时间,由CDN节点直接响应状态码,减轻源站压力。
典型场景
文件A在源站已被删除,但客户端仍持续访问,CDN节点没有缓存文件A,所有针对文件A的请求都将被转发回源,由源站响应4xx状态码,这将会大幅增加源站的压力。如果CDN节点上配置了缓存4xx状态码,那么CDN节点针对文件A的请求首次回源后,会缓存4xx状态码,在预设缓存时间内,当客户端再次请求文件A时,将会由CDN节点直接响应4xx状态码,无需回源。
异常状态码缓存规则
对于204、305、400、403、404、405、414、500、501、502、503和504状态码,缓存规则如下图所示:
请求通过配置Range回源时,缓存规则如下:
非200、206状态码(包含但不限于204、305、400、403、404、405、414、500、501、502、503和504状态码)的情况下,均不缓存。
200、206状态码按照阿里云CDN默认缓存规则及优先级进行缓存。
收到5xx状态码会删除已缓存的分片文件(回源超时不会删除缓存文件)。
说明Range回源情况下,源站会把一个大文件分割成多个小的文件分片来返回给CDN节点。比如有个文件被分割成了10个分片,CDN节点已经缓存了5个分片,在请求第6个分片时,源站响应了5xx状态码,这时会把前面已经缓存的5个分片全部删除。
请求未通过配置Range回源时,按照如下规则缓存:
如果源站返回
set-cookie
响应头,CDN不缓存。如果源站没有返回
Set-Cookie
响应头,则遵循CDN控制台配置的状态码过期时间来缓存,配置多条规则时生效方式请参考多条规则生效优先级说明。如果源站没有返回
Set-Cookie
响应头,CDN控制台也没有配置状态码过期时间,则按照源站设置的Pragma
、Cache-Control
或者Expires
响应头来缓存。如果源站没有返回
Set-Cookie
、Pragma
、Cache-Control
或者Expires
响应头,CDN控制台也没有配置状态码过期时间,则默认缓存1秒。
对于303、304、401、407、600和601状态码,CDN均不进行缓存。
多条规则生效优先级说明
支持设置多条状态码缓存规则,当某个请求同时匹配了多条规则时,只会有一条规则生效,生效规则如下:
操作步骤
登录CDN控制台。
在左侧导航栏,单击域名管理。
在域名管理页面,找到目标域名,单击操作列的管理。
在指定域名的左侧导航栏,单击缓存配置。
单击状态码过期时间页签。
单击添加,配置状态码过期时间。
类型
注意事项
类型
支持目录和文件后缀名这两种类型,请根据您的实际需求选择。
说明不同类型规则的生效优先级:文件后缀名>目录,具体请参见异常状态码缓存规则。
地址
类型选择为目录,填写说明如下:
每次只能添加一条目录。
支持输入目录的完整路径,须以正斜线(/)开头,例如/directory/aaa。
类型选择为文件后缀名,填写说明如下:
支持输入一个或多个文件后缀名,多个文件后缀名用半角逗号(,)分隔,例如
jpg,txt
。说明不同记录中配置的文件后缀名类型完全相同,仅有大小写区分时,后面创建的会覆盖掉前面创建的,例如创建jpg,txt规则后,再创建jpg,txt规则时,会覆盖掉之前创建的jpg,txt记录。此时,如果需要配置小写规则,可以单独创建txt和jpg的规则。配置规则实际生效的时候是严格区分大小写。
不支持用星号(*)匹配所有的文件类型。
状态码过期时间设置
需要缓存的状态码及其缓存时间,最长可设置3年,单位:秒,配置规则如下:
多个状态码用半角逗号(,)分隔。
对于2xx、3xx状态码,仅支持单个精准配置,不支持模糊批量配置。例如,201=10(支持),2xx=12(不支持)。
对于4xx、5xx状态码,既支持单个精准配置,也支持模糊批量配置。例如,401=10(支持),4xx=12(也支持)。
单击确定,完成配置。
成功配置状态码过期时间后,您可以在状态码过期时间列表中,对当前的配置进行修改或删除操作。
配置示例
示例一:目录类型规则
创建目录类型规则如下图所示:
在/directory/aaa目录下,所有4xx状态码缓存时间为10秒,201状态码缓存时间为15秒,在该时间区间内,由CDN节点直接响应对应的访问请求;超过该时间后,会触发回源。
示例二:文件后缀名类型规则
创建文件后缀名类型规则如下图所示:
文件后缀为.jpg或.txt类型,403状态码缓存时间为10秒,404状态码缓存时间为15秒,在该时间区间内,由CDN节点直接响应对应的访问请求;超过该时间后,会触发回源。
示例三:不同类型规则的生效优先级
分别创建了一条“目录类型规则”和一条“文件后缀名类型规则”,设置了不同的状态码过期时间,如下图所示:
用户请求
http://example.com/directory/aaa/test.jpg
,CDN节点上没有缓存资源,CDN节点向源站请求资源,源站响应了404状态码,这里同时匹配上了“目录类型规则”和“文件后缀名类型规则”,因为在规则类型不同的情况下,规则生效优先级是文件后缀名>目录,所以“文件后缀名类型规则”生效,404状态码的实际缓存时间是20秒。示例四:相同类型多条规则的生效优先级
先创建了一条“目录类型规则一”,匹配的地址是“/directory”,然后再创建另一条“目录类型规则二”,匹配的地址是“/directory/aaa”,设置了不同的状态码过期时间,如下图所示:
用户请求
http://example.com/directory/aaa/test.jpg
,CDN节点上没有缓存资源,CDN节点向源站请求资源,源站响应了404状态码,这里同时匹配上了两条“目录类型规则”,因为在规则类型相同的情况下,规则生效优先级是早创建的>晚创建的,所以最早创建的“目录类型规则一”生效,404状态码的实际缓存时间是15秒。