火山引擎内容分发网络(CDN)提供了规则引擎。在规则引擎中,您可以设置复杂的条件来匹配客户端请求,以及 CDN 执行的相应动作。每个动作中包含一个 CDN 特性的配置。要启用规则引擎,请 提交工单。
说明
当前,部分 CDN 特性无法在规则引擎中设置,例如 "回源参数设置"、"Multi Range" 等。这些 CDN 特性只能在 "分阶段配置" 中设置。
关于可在规则引擎中配置的 CDN 特性,参见 动作列表。
术语 | 说明 |
---|---|
规则 | 定义了用户请求的匹配条件以及 CDN 执行的动作。规则中包含一个 IF ... ELSE ... 结构的条件表达式。 |
子规则 | 子规则嵌套于规则中。当请求匹配规则中的条件时,CDN 继续处理子规则。如果请求匹配子规则中的条件,CDN 执行子规则中的动作。子规则中无法嵌套子规则。在每条规则中,IF 和 ELSE 下总共最多包含 10 条子规则。 |
条件表达式 | 包含一个 IF ... ELSE ... 结构,定义了用于匹配用户请求的条件,以及 CDN 执行的动作。逻辑是如果 IF 语句满足,则 CDN 执行 IF 下的动作,否则执行 ELSE 下的动作。 |
匹配条件 | 表示匹配用户请求的条件,在 IF 下创建。匹配条件可以是单条件或者条件组。条件之间的关系由条件关系定义。
|
动作 | 表示 CDN 对匹配条件的用户请求而执行的操作。 |
规则范围 | 处理逻辑 |
---|---|
单条子规则 | 遵循 IF ... ELSE ... 结构的处理逻辑,也就是说:
|
单条规则 | 在单条规则下:
|
多条规则 | 当收到用户请求时,CDN 依次处理每条规则。 |
在处理用户请求时,CDN 最多会经历以下五个阶段,如下图所示。
在规则引擎中,
在 "收到用户请求" 和 "收到源站响应" 这两个阶段,CDN 将每条规则与用户请求和请求所对应的源站响应进行匹配。
每个动作都有其执行阶段。
下表展示了您可以在规则中指定的条件类型,可为这些条件类型配置的动作、以及这些动作的执行阶段。
匹配对象 | 可指定的条件类型 | 可配置动作 | 动作执行阶段 |
---|---|---|---|
用户请求 |
|
| 收到客户端请求 |
| 回源请求文件 | ||
| 缓存源站响应 | ||
源站响应头设置 | 收到源站响应 | ||
HTTP 响应头设置 | 响应用户请求 | ||
源站响应 |
| HTTP 响应头设置 | 响应用户请求 |
收到请求时,CDN 基于规则列表和规则配置,从上至下,从外向内依次处理规则和子规则。如果您在不同规则的动作中设置了相同的 CDN 特性,在匹配条件满足的情况下,会出现配置覆盖或者叠加的情况。
示例
假设您的规则引擎配置如下图所示。CDN 收到了 /docs/3.php
的请求,并且源站响应中包含 param_a
、param_b
和 param_c
这三个响应头。在这个场景中,CDN 对客户端的响应中不会包含 param_a
和 param_b
,但会包含 param_c
。param_c
的值会被设置为 value_2
。
如果您在规则引擎和 "分阶段配置" 中都设置某个 CDN 特性,在匹配条件满足的情况下,规则引擎的优先级高。
示例
在以下场景中,您在规则引擎和 "分阶段配置" 中都设置了 "回源 HTTP 超时"。该场景实现的配置目标是:
如果请求文件的后缀名是 .php
,则 CDN 回源请求的 HTTP 超时是 10 秒。
在其他情况下,超时是 5 秒。
在规则中,您可以添加以下类型的条件。
条件类型 | 说明 | 可指定的运算符 | 忽略大小写配置 |
---|---|---|---|
全部(任意请求) | 表示该条件对任何用户请求生效。 | N/A | N/A |
请求路径 | 表示用户请求 URL 中的路径。 | 等于、不等于、前缀匹配、前缀不匹配、后缀匹配、后缀不匹配、正则匹配、正则不匹配
前缀匹配/前缀不匹配/后缀匹配/后缀不匹配 说明
| 如果您勾选了 忽略大小写,表示 CDN 在将条件与用户请求或者源站响应匹配时,匹配过程是大小写不敏感的。 |
URL(不含协议、host) | 表示用户请求 URL 中的路径和查询字符串。 | ||
完整 URL | 表示完整的用户请求 URL。 | ||
请求参数 | 表示用户请求 URL 中的查询参数。 | 等于、不等于、存在、不存在、正则匹配、正则不匹配 | |
Origin 请求头 | 表示用户请求中的 Origin 头部。 | ||
Referer 请求头 | 表示用户请求中的 Referer 头部。 | ||
UA 请求头 | 表示用户请求中的 User-Agent 头部。 | ||
HTTP 请求头 | 表示用户请求中的某个头部。您需要指定该头部名称。 | ||
源站响应头 | 表示源站响应中的某个头部。您需要指定该头部名称。 | ||
客户端 IP | 表示发送用户请求的客户端 IP 地址。 | 匹配、不匹配 | N/A |
请求时间 | 表示 CDN 收到用户请求的时间。
| ||
客户端区域 | 表示客户端 IP 地址来自的国家或地区。 | ||
源站响应状态码 | 表示源站响应中的状态码。 | ||
请求方法 | 表示用户请求使用的请求方法。 | 等于、不等于 | |
请求协议 | 表示用户请求使用的协议。 |
匹配值说明
不同的条件类型对于匹配值有不同的输入要求。参见 匹配值输入要求。
在单个匹配条件中,如果匹配值允许多个,则:
对于 "等于"、"前缀匹配"、"后缀匹配"、"正则匹配" 这几个运算符,这些匹配值之间的关系是 "或",表示只要用户请求或源站响应中的相应部分等于或者匹配任何一个值,该条件就满足。
对于 "不等于"、"前缀不匹配"、"后缀不匹配"、"正则不匹配" 这几个运算符,这些匹配值之间的关系是 "且",表示只有用户请求或源站响应中的相应部分不等于或者不匹配所有的值,该条件才满足。
在规则中,您可以设置以下动作。
动作 | 动作执行阶段 | 配置说明 |
---|---|---|
URL 重定向改写 | 收到客户端请求 | |
允许访问 | ||
协议强制跳转 | 参见文档 | |
下载限速 | 参见文档 | |
客户端请求头设置 | 在 CDN 处理用户请求前,设置用户请求中的头部。 | |
拒绝访问 | ||
缓存键值 | 缓存源站响应 | 参见文档 |
智能压缩 | 参见文档 | |
视频拖拽 | 参见文档 | |
节点缓存规则 | 参见文档 | |
HTTP 响应头设置 | 响应用户请求 | 参见文档 |
Range 回源 | 回源请求文件 | 参见文档 |
回源重定向跟随 | 参见文档 | |
回源 TCP 超时 | 参见文档 | |
回源 HTTP 超时 | 参见文档 |
场景 | 配置示例 |
---|---|
针对客户端请求的特征,制定更细化的黑白名单策略,并自定义 CDN 的响应状态码。
|
场景 | 配置示例 |
---|---|
针对客户端请求的特征,设置相应的缓存时间,以制定更细化的缓存策略。
| |
CDN 对 Option 请求响应 200 状态码 | ![]() |
场景 | 配置示例 |
---|---|
根据请求 URL 中的参数、客户端所在地区等特征对请求限速。 | ![]() |
场景 | 配置示例 |
---|---|
除了 scheme 是 HTTP/HTTPS 的请求,额外来自微信小程序的请求进行跨域校验(验证 URL 格式),并返回客户端预期的 | 设置要求:
|
场景 | 配置示例 |
---|---|
通过改写 Content-Disposition 响应头来更改文件名,防止文件在下载过程中被劫持。 | ![]() |
条件类型 | 匹配值输入要求 |
---|---|
请求路径 | 每个路径必须以
每个路径之间以回车分隔,最多 100 个路径。 |
URL(不含协议、host) | 每个 URL 必须以
每个 URL 之间以回车分隔,最多 100 个 URL。 |
完整 URL | 每个 URL 必须以
每个 URL 之间以回车分隔,最多 100 个请求 URL。 |
请求参数 | 请求参数的名称不能超过 30 个字符。
每个参数值之间以回车分隔,最多 100 个参数值。 |
Origin 请求头 | 每个 Origin 不能超过 200 个字符。每个 Origin 之间以回车分隔,最多 100 个 Origin。 |
Referer 请求头 | 每个 Referer 不能超过 200 个字符。每个 Referer 之间以回车分隔,最多 100 个 Referer。 |
UA 请求头 | 每个 User-Agent 不能超过 200 个字符。每个 User-Agent 之间以回车分隔,最多 100 个 User-Agent。 |
HTTP 请求头 | 请求头的名称不能超过 100 个字符。每个请求头的值不能超过 200 个字符。每个值之间以回车分隔,最多 100 个值。 |
源站响应头 | 响应头的名称不能超过 100 个字符。每个响应头的值不能超过 200 个字符。每个值之间以回车分隔,最多 100 个值。 |
客户端 IP | 每个 IP 地址可以是 IPv4 地址、IPv6 地址,IPv4 CIDR 地址、IPv6 CIDR 地址。每个 IP 地址之间以回车分隔,最多 100 个 IP 地址。 |