在规则引擎中配置了多条规则或与基础配置产生交集时,理解其执行顺序和优先级至关重要。本文详细介绍了规则引擎的处理流程、动作执行的生命周期阶段,以及各种配置冲突时的优先级判定逻辑。
CDN 按照规则列表的顺序,自上而下依次处理每条规则。具体的执行逻辑如下:
IF...ELSE... 逻辑。如果请求满足 IF 条件,则 CDN 执行 IF 下的动作;否则,执行 ELSE 下的动作。IF...ELSE... 逻辑。IF 条件,CDN 会先执行外层 IF 下的动作,然后按顺序处理外层 IF 下的所有子规则。IF 条件,CDN 会先执行外层 ELSE 下的动作,然后按顺序处理外层 ELSE 下的所有子规则。规则引擎的作用范围覆盖以下五个阶段(如下图所示),您在规则引擎中定义的各项行动,均会在这五个阶段中的一个阶段执行。
规则引擎主要在以下两个阶段对请求进行匹配:
每个动作都有其执行阶段。下表总结了条件类型、动作和动作执行阶段的对应关系:
可指定的条件类型 | 可指定的动作 | 动作执行阶段 | |
|---|---|---|---|
用户请求 |
|
| 客户端请求 |
| 回源请求 | ||
| CDN 缓存 | ||
| 客户端响应 | ||
源站响应 |
|
| 客户端响应 |
CDN 按照“从上至下、从外向内”的顺序处理规则和子规则。当多个(子)规则中配置了相同的动作时,最后执行的动作配置最终生效(即位于底部或内层的配置会覆盖位于上方或外层的配置)。
示例:
假设您的规则配置如下:
php、asp、jsp、html(忽略大小写)删除 param_a,操作 设置 param_c 为 value_1/docs/(忽略大小写)删除 param_b,操作 设置 param_c 为 value_2当 CDN 收到对 /docs/3.php 的请求,且源站响应包含 param_a、param_b 和 param_c 三个响应头时,最终客户端收到的响应将不包含 param_a 和 param_b,但会包含 param_c,且 param_c 的值被设置为 value_2。
如果您在规则引擎和“分阶段配置”中都设置了同一个 CDN 特性,规则引擎中的优先级更高。当两者发生冲突时,系统优先执行规则引擎中的动作设定。
示例:
假设您希望对 .php 文件的回源请求设置 HTTP 超时为 10 秒,其他文件为 5 秒。您可以如下配置:
.php(忽略大小写)10 秒5 秒