规则相关的功能在以下三个特性上存在差异。本文将对这三个特性的概念进行详细说明,并明确每个规则相关功能的特性差异。
规则配置和全局配置的生效优先级
同一个功能下添加的规则配置的生效优先级指的是规则匹配的执行顺序。每一条规则配置在添加完成以后,都会有一个规则列表的序号,规则配置将会按序号从小到大的顺序来匹配。
每个规则相关的功能都包含规则配置和全局配置,所有规则配置的生效优先级都高于全局配置,一个功能同时添加了规则配置和全局配置的情况下,如果用户请求匹配上规则条件,则规则配置会优先执行,如果没有匹配到规则条件,则最后会执行全局配置(如果全局配置为空,则会按照ESA节点上的默认设置来执行)。
序号 | 配置 | 规则条件 |
1 | 规则配置1 | 条件A(不匹配) |
2 | 规则配置2 | 条件B |
3 | 规则配置3 | 条件C |
全局配置 | 无 | |
执行顺序 | 规则配置的执行顺序为:序号1 > 序号2 > 序号3 > 全局配置。 |
规则功能的可重入性
功能模块的可重入性指的是某个指令是否可以安全地在多个阶段、多次调用,并且每次调用的行为是独立的、叠加的、互不影响的。
可重入的功能
在一个请求的处理过程中,可重入的功能可以被多次调用,并且每次调用的行为是独立的、叠加的、互不影响的,例如:修改出站请求头功能是可重入功能,同一个客户端请求如果匹配上多个规则条件,则对应的每个规则配置都会执行。
示例1:修改出站请求头
假如一个用户请求同时匹配条件B和条件C,那么配置2和配置3都会执行,全局配置也会执行,但是因为全局配置没有设置执行动作,因此没有影响,最终执行结果是用户请求将会被加上以下2个请求头:
animal: cat
fruit: apple
序号 | 规则配置 | 规则条件 | 功能配置 | 是否执行 |
1 | 规则配置1 | 条件A(不匹配) | 新增一个请求头,请求头名称为food,请求头值为rice。 | 否 |
2 | 规则配置2 | 条件B | 新增一个请求头,请求头名称为animal,请求头值为cat。 | 是 |
3 | 规则配置3 | 条件C | 新增一个请求头,请求头名称为fruit,请求头值为apple。 | 是 |
全局配置 | 无 | 无 | 是 |
不可重入的功能
在一个请求的处理过程中,不可重入的功能只能被调用一次,调用结束以后就跳出对应的功能模块。同一个客户端请求如果匹配上多个规则条件,则只有第一个匹配上的规则配置会执行。
示例2:重写URL
假如一个用户请求同时符合条件B和条件C,那么仅配置2会执行,由于规则配置2序号靠前,先匹配上了条件B,执行结果是用户请求URL的路径被改写为/animal:
原始请求:http://example.com/test
重写后的请求:http://example.com/animal
序号 | 规则配置 | 规则条件 | 功能配置 | 是否执行 |
1 | 规则配置1 | 条件A(不匹配) | 将用户请求URL的路径被改写为/food。 | 否 |
2 | 规则配置2 | 条件B | 将用户请求URL的路径被改写为/animal。 | 是 |
3 | 规则配置3 | 条件C | 将用户请求URL的路径被改写为/fruit。 | 否 |
全局配置 | 无 | 无 | 否 |
规则配置的生效颗粒度
规则配置的生效颗粒度包含功能维度和子功能维度。
功能维度
规则作用于整个功能模块,配置按整个功能模块生效。
用户请求匹配上某个规则条件时,如果某个子功能模块的配置为空,则该子功能模块将按照未添加配置来执行。
示例1:SSL/TLS规则(不可重入功能,并且规则配置按功能维度生效)
假设用户请求同时符合条件 B 和条件 C,由于规则配置2序号靠前,先匹配上了条件B,则仅执行配置 2,其中 TLS 加密套件为空的部分按默认设置生效。
序号 | 规则配置 | 规则条件 | SSL/TLS加密 | TLS加密套件与协议版本配置 | OCSP Stapling | HTTP/2 | HTTP/3(QUIC) | 是否执行 |
1 | 规则配置1 | 条件A(不匹配) | 开启 | - | 关闭 | 关闭 | 关闭 | 否 |
2 | 规则配置2 | 条件B | 开启 | - | 关闭 | 关闭 | 关闭 | 是 |
3 | 规则配置3 | 条件C | 开启 | - | 开启 | 开启 | 开启 | 否 |
全局配置 | 无 | 关闭 | - | 关闭 | 开启 | 开启 | 否 |
子功能维度
规则作用于子功能模块,配置按子功能模块生效。
用户请求匹配上某个规则条件时,如果某个子功能模块的配置为空,则该子功能模块将继续往下匹配规则条件,直到命中规则条件的同时,子功能模块的配置不为空。
示例2:缓存规则(不可重入功能,并且规则配置按子功能维度生效)
以下为缓存规则配置示例。假设用户请求同时符合条件 B、C 和 D,按照序号从小到大匹配则各子功能,未配置项按全局默认设置执行。
序号 | 配置 | 规则条件 | 缓存资格 | 浏览器缓存过期时间 | 边缘缓存过期时间 | 自定义CacheKey | 端口缓存 | 响应过期缓存 | 缓存保持 |
1 | 规则配置1 | 条件A(不匹配) | 符合缓存条件 | - | 优先遵循源站缓存策略(如果存在),否则不缓存 | - | - | 关闭 | - |
2 | 规则配置2 | 条件B | 符合缓存条件 | - | 优先遵循源站缓存策略(如果存在),否则不缓存 | - | - | 关闭 | - |
3 | 规则配置3 | 条件C | 绕过缓存 | 不缓存 | - | - | - | - | - |
4 | 规则配置4 | 条件D | 符合缓存条件 | - | 忽略源站缓存策略,使用自定义缓存TTL=1小时 | 忽略查询字符串 | - | 关闭 | - |
5 | 规则配置5 | 条件E | 符合缓存条件 | - | - | - | - | 关闭 | - |
全局配置 | 无 | - | - | - | - | 默认关闭 | - | 默认关闭 | |
最终生效配置 | 符合缓存条件 | 不缓存 | 优先遵循源站缓存策略(如果存在),否则不缓存 | 忽略查询字符串 | 关闭 | 关闭 | 关闭 |
不同功能特性差异表
功能分类 | 规则功能名称 | 规则功能的可重入性 | 规则配置的生效颗粒度 | 规则配置的生效优先级 |
SSL/TLS | 不可重入 | 功能 | 按照规则列表的序号,序号越小,优先级越高。 | |
不可重入 | 子功能 | 按照规则列表的序号,序号越小,优先级越高。 | ||
转换规则 | 不可重入 | 功能 | 按照规则列表的序号,序号越小,优先级越高。 | |
可重入 | 子功能 | 按照规则列表的序号,序号越小,优先级越高。 | ||
可重入 | 子功能 | 按照规则列表的序号,序号越小,优先级越高。 | ||
重定向 | 不可重入 | 功能 | 按照规则列表的序号,序号越小,优先级越高。 | |
缓存 | 不可重入 | 子功能 | 按照规则列表的序号,序号越小,优先级越高。 | |
内容优化 | 不可重入 | 子功能 | 按照规则列表的序号,序号越小,优先级越高。 | |
不可重入 | 子功能 | 按照规则列表的序号,序号越小,优先级越高。 | ||
不可重入 | 子功能 | 按照规则列表的序号,序号越小,优先级越高。 | ||
网络优化 | 不可重入 | 子功能 | 按照规则列表的序号,序号越小,优先级越高。 | |
回源 | 不可重入 | 子功能 | 按照规则列表的序号,序号越小,优先级越高。 | |
配置管理 | 不可重入 | 功能 | 按照规则列表的序号,序号越小,优先级越高。 | |
流量 | 不可重入 | 功能 | 按照规则列表的序号,序号越小,优先级越高。 | |
不可重入 | 功能 | 按照规则列表的序号,序号越小,优先级越高。 需要注意是否设置了结束动作:
| ||
安全防护 | 不可重入 | 功能 | 按照规则列表的序号,序号越小,优先级越高。 | |
不可重入 | 功能 | 按照规则列表的序号,序号越小,优先级越高。 | ||
不可重入 | 功能 | 按照规则列表的序号,序号越小,优先级越高。 | ||
不可重入 | 功能 | 按照规则列表的序号,序号越小,优先级越高。 | ||
不可重入 | 功能 | 按照规则列表的序号,序号越小,优先级越高。 | ||
不可重入 | 功能 | 按照规则列表的序号,序号越小,优先级越高。 | ||
不可重入 | 功能 | 按照规则列表的序号,序号越小,优先级越高。 |