在规则引擎中配置了多条规则或与基础配置产生交集时,理解其执行顺序和优先级至关重要。本文详细介绍了规则引擎的处理流程、动作执行的生命周期阶段,以及各种配置冲突时的优先级判定逻辑。
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 特性,规则引擎中的优先级更高。当两者发生冲突时,系统优先执行规则引擎中的动作设定。
对于 允许访问 动作,您需要指定生效范围。指定后,生效范围内的访问控制规则不再拦截符合规则引擎条件的请求;其他不符合条件的请求,仍按对应访问控制规则处理。
例如,您在分阶段配置中将 www.example.com 设置为 Referer 黑名单,同时在规则引擎中设置请求路径后缀为 .txt 时执行 允许访问,并将生效范围指定为 Referer 规则。在这种情况下,如果用户请求的 Referer 头部为 https://www.example.com/page.html,且请求路径是 /3.txt,该请求会被放行;如果用户请求的 Referer 头部相同,但请求路径是 /3.html,该请求仍会被 Referer 黑名单拦截。
优先级示例:
假设您希望对 .php 文件的回源请求设置 HTTP 超时为 10 秒,其他文件为 5 秒。您可以如下配置:
.php(忽略大小写)10 秒5 秒