You need to enable JavaScript to run this app.
导航
规则引擎
最近更新时间:2025.04.28 14:41:58首次发布时间:2025.04.28 14:41:58
我的收藏
有用
有用
无用
无用

概述

火山引擎内容分发网络(CDN)提供了规则引擎。在规则引擎中,您可以设置复杂的条件来匹配客户端请求,以及 CDN 执行的相应动作。每个动作中包含一个 CDN 特性的配置。要启用规则引擎,请 提交工单

说明

当前,部分 CDN 特性无法在规则引擎中设置,例如 "回源参数设置"、"Multi Range" 等。这些 CDN 特性只能在 "分阶段配置" 中设置。

关于可在规则引擎中配置的 CDN 特性,参见 动作列表

关键术语

术语说明
规则定义了用户请求的匹配条件以及 CDN 执行的动作。规则中包含一个 IF ... ELSE ... 结构的条件表达式。
子规则子规则嵌套于规则中。当请求匹配规则中的条件时,CDN 继续处理子规则。如果请求匹配子规则中的条件,CDN 执行子规则中的动作。子规则中无法嵌套子规则。在每条规则中,IF 和 ELSE 下总共最多包含 10 条子规则。
条件表达式包含一个 IF ... ELSE ... 结构,定义了用于匹配用户请求的条件,以及 CDN 执行的动作。逻辑是如果 IF 语句满足,则 CDN 执行 IF 下的动作,否则执行 ELSE 下的动作。

匹配条件

表示匹配用户请求的条件,在 IF 下创建。匹配条件可以是单条件或者条件组。条件之间的关系由条件关系定义。

  • 单条件:包含条件类型、运算符、匹配值。

  • 条件组:包含多个条件以及这些条件之间的关系。

  • 条件关系:连接最多 5 个条件。条件之间的关系可以是:

    • And:表示匹配的要求是满足所有条件。

    • Or:表示匹配的要求是满足任意条件。

动作表示 CDN 对匹配条件的用户请求而执行的操作。

处理逻辑

规则范围处理逻辑

单条子规则

遵循 IF ... ELSE ... 结构的处理逻辑,也就是说:

  • 如果 IF 语句满足,CDN 执行 IF 下的动作。

  • 否则,CDN 执行 ELSE 下的动作。

单条规则

在单条规则下:

  • 如果规则下没有子规则,则遵循 IF ... ELSE ... 结构的处理逻辑。

  • 如果规则下存在子规则,该规则的处理逻辑如下:

    • 如果外层 IF 语句满足,CDN 先执行外层 IF 下的动作,然后依次处理 IF 下的每条子规则。

    • 否则,CDN 先执行外层 ELSE 下的动作,然后依次处理 ELSE 下的每条子规则。

多条规则当收到用户请求时,CDN 依次处理每条规则。

动作执行阶段

在处理用户请求时,CDN 最多会经历以下五个阶段,如下图所示。
alt

在规则引擎中,

  • 在 "收到用户请求" 和 "收到源站响应" 这两个阶段,CDN 将每条规则与用户请求和请求所对应的源站响应进行匹配。

  • 每个动作都有其执行阶段。

下表展示了您可以在规则中指定的条件类型,可为这些条件类型配置的动作、以及这些动作的执行阶段。

匹配对象可指定的条件类型可配置动作动作执行阶段

用户请求

  • 请求路径
  • URL(不含协议、host)
  • 完整 URL
  • 请求参数
  • Referer 请求头
  • 客户端 IP
  • Origin 请求头
  • UA 请求头
  • HTTP 请求头
  • 客户端区域
  • 请求方法
  • 请求时间
  • 请求协议
  • 拒绝访问
  • 允许访问
  • URL 重定向改写
  • 协议强制跳转
  • 客户端请求头设置
  • 下载限速

收到客户端请求

  • Range 回源
  • 回源重定向跟随
  • 回源 HTTP 超时
  • 回源 TCP 超时
  • HTTP 请求头设置

回源请求文件

  • 节点缓存规则
  • 视频拖拽
  • 缓存键值
  • 智能压缩

缓存源站响应

源站响应头设置收到源站响应
HTTP 响应头设置响应用户请求

源站响应

  • 源站响应头
  • 源站响应状态码

HTTP 响应头设置

响应用户请求

优先级

相同动作的优先级

收到请求时,CDN 基于规则列表和规则配置,从上至下,从外向内依次处理规则和子规则。如果您在不同规则的动作中设置了相同的 CDN 特性,在匹配条件满足的情况下,会出现配置覆盖或者叠加的情况。

示例
假设您的规则引擎配置如下图所示。CDN 收到了 /docs/3.php 的请求,并且源站响应中包含 param_aparam_bparam_c 这三个响应头。在这个场景中,CDN 对客户端的响应中不会包含 param_aparam_b,但会包含 param_cparam_c 的值会被设置为 value_2

规则引擎和分阶段配置的优先级

如果您在规则引擎和 "分阶段配置" 中都设置某个 CDN 特性,在匹配条件满足的情况下,规则引擎的优先级高。

示例
在以下场景中,您在规则引擎和 "分阶段配置" 中都设置了 "回源 HTTP 超时"。该场景实现的配置目标是:

  • 如果请求文件的后缀名是 .php,则 CDN 回源请求的 HTTP 超时是 10 秒。

  • 在其他情况下,超时是 5 秒。

条件列表

在规则中,您可以添加以下类型的条件。

条件类型说明可指定的运算符忽略大小写配置
全部(任意请求)表示该条件对任何用户请求生效。N/AN/A

请求路径

表示用户请求 URL 中的路径。

等于、不等于、前缀匹配、前缀不匹配、后缀匹配、后缀不匹配、正则匹配、正则不匹配

等于/不等于 说明

  • 这两个运算符使用字符串精确匹配。

前缀匹配/前缀不匹配/后缀匹配/后缀不匹配 说明

  • 前缀匹配/前缀不匹配:表示如果匹配对象的值是以您指定的前缀开头,则视为匹配。

  • 后缀匹配/后缀不匹配:表示如果匹配对象的值是以您指定的前缀结尾,则视为匹配。

如果您勾选了 忽略大小写,表示 CDN 在将条件与用户请求或者源站响应匹配时,匹配过程是大小写不敏感的。

URL(不含协议、host)表示用户请求 URL 中的路径和查询字符串。
完整 URL表示完整的用户请求 URL。

请求参数

表示用户请求 URL 中的查询参数。

等于、不等于、存在、不存在、正则匹配、正则不匹配

"正则匹配" 说明
如果对象值中包含指定正则表达式匹配的字符串,则该对象值与正则表达式视为匹配。

例如:对象值是 abc123a45。您指定的正则表达式是 [0-9]{1,}a{1,3},与对象值中的 123a 匹配。这个情况下,该对象值与正则表达式视为匹配。

要使用 "正则匹配",也请 提交工单

Origin 请求头表示用户请求中的 Origin 头部。
Referer 请求头表示用户请求中的 Referer 头部。
UA 请求头表示用户请求中的 User-Agent 头部。
HTTP 请求头表示用户请求中的某个头部。您需要指定该头部名称。
源站响应头表示源站响应中的某个头部。您需要指定该头部名称。

客户端 IP

表示发送用户请求的客户端 IP 地址。

匹配、不匹配

N/A

请求时间

表示 CDN 收到用户请求的时间。

该条件类型有以下选项:

  • 每日时间段:表示每天的一个固定时间段。

  • 星期:表示每星期中的固定几天。

  • 特定时间段:表示一个时间段。您需要指定该时间段的开始时间和结束时间,精确到秒。

客户端区域表示客户端 IP 地址来自的国家或地区。
源站响应状态码表示源站响应中的状态码。
请求方法表示用户请求使用的请求方法。等于、不等于
请求协议表示用户请求使用的协议。

匹配值说明
不同的条件类型对于匹配值有不同的输入要求。参见 匹配值输入要求

在单个匹配条件中,如果匹配值允许多个,则:

  • 对于 "等于"、"前缀匹配"、"后缀匹配"、"正则匹配" 这几个运算符,这些匹配值之间的关系是 "或",表示只要用户请求或源站响应中的相应部分等于或者匹配任何一个值,该条件就满足。

  • 对于 "不等于"、"前缀不匹配"、"后缀不匹配"、"正则不匹配" 这几个运算符,这些匹配值之间的关系是 "且",表示只有用户请求或源站响应中的相应部分不等于或者不匹配所有的值,该条件才满足。

动作列表

在规则中,您可以设置以下动作。

动作动作执行阶段配置说明

URL 重定向改写

收到客户端请求

参见文档

允许访问
协议强制跳转参见文档
下载限速参见文档
客户端请求头设置在 CDN 处理用户请求前,设置用户请求中的头部。
拒绝访问
缓存键值缓存源站响应参见文档
智能压缩参见文档
视频拖拽参见文档
节点缓存规则参见文档
HTTP 响应头设置响应用户请求参见文档
Range 回源回源请求文件参见文档
回源重定向跟随参见文档
回源 TCP 超时参见文档
回源 HTTP 超时参见文档

配置示例

允许或拒绝特定客户端请求

场景配置示例

针对客户端请求的特征,制定更细化的黑白名单策略,并自定义 CDN 的响应状态码。

请求特征涵盖:

  • 请求头,包含 User-Agent、Referer、Origin 等

  • 客户端 IP 地址

  • 请求 URL

  • 客户端所在地区

  • 请求方法等

  • ... ...

对客户端请求设置更细化的缓存策略

场景配置示例

针对客户端请求的特征,设置相应的缓存时间,以制定更细化的缓存策略。

请求特征涵盖:

  • 请求头,包含 User-Agent、Referer、Origin 等

  • 客户端 IP 地址

  • 请求 URL

  • 客户端所在地区

  • 请求方法等

  • ... ...

CDN 对 Option 请求响应 200 状态码

对特定客户端请求限速

场景配置示例
根据请求 URL 中的参数、客户端所在地区等特征对请求限速。

设置跨域校验策略

场景配置示例

除了 scheme 是 HTTP/HTTPS 的请求,额外来自微信小程序的请求进行跨域校验(验证 URL 格式),并返回客户端预期的 Access-Control-Allow-Origin 头部值。

设置要求:

  • 默认删除 Access-Control-Allow-Origin 头部。

  • 如果跨域校验通过,则将响应中 Access-Control-Allow-Origin 头部设置为请求中 Origin 头部值。

改写 Content-Disposition 响应头

场景配置示例
通过改写 Content-Disposition 响应头来更改文件名,防止文件在下载过程中被劫持。

更多信息

匹配值输入要求

条件类型匹配值输入要求

请求路径

每个路径必须以 / 开头,长度不能超过 300 个字符,不能包含以下字符:

  • %、空格

每个路径之间以回车分隔,最多 100 个路径。

URL(不含协议、host)

每个 URL 必须以 / 开头,长度不能超过 300 个字符,不能包含以下字符:

  • %、空格

每个 URL 之间以回车分隔,最多 100 个 URL。

完整 URL

每个 URL 必须以 https:// 或者 http:// 开头,长度不能超过 300 个字符,不能包含以下字符:

  • %、空格

每个 URL 之间以回车分隔,最多 100 个请求 URL。

请求参数

请求参数的名称不能超过 30 个字符。

每个参数值不能超过 100 个字符,不能包含以下字符:

  • %、空格

每个参数值之间以回车分隔,最多 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 地址。