规则引擎允许您使用相同的基本语法和配置逻辑在不同的产品功能(例如:缓存、重定向、压缩、回源、WAF等)中创建和部署条件规则。
概述
规则引擎功能可以使用图形化的方式来配置各种条件规则。条件规则支持对用户请求中携带的各种参数信息进行识别,以此来决定某个配置是否对该请求生效,可以更加灵活、更加精确地控制各种配置策略的执行效果。
规则生效优先级
同一个功能(例如:浏览器缓存过期时间)在全局配置和规则配置上都添加了配置的情况下,规则配置上的生效优先级更高。
同一个规则功能(例如:缓存规则)的配置列表内,如果存在多条规则配置,则执行顺序是从上到下,顺序执行。可以在规则配置列表内调整规则的位置,以调整规则的执行优先级。
注意事项
单条规则条件的大小不超过4k字节,站点维度上所有的配置信息限制总大小不超过512k字节(包含证书、规则、网络、缓存等其他功能配置,但不包含安全部分的配置)。
规则条件支持嵌套,嵌套层级深度最大限制为2层,不同层级支持独立的逻辑关系设置。
单条规则支持匹配最多对象个数20个。
传入请求类型
传入请求类型有以下两个配置选项:
所有传入请求:此规则应用于站点下的所有流量,即所有请求的匹配结果都为true。
自定义规则:此规则仅应用于与自定义表达式匹配的流量,可以用于精准地过滤请求。
规则条件语法说明
条件表达式:筛选满足特定特征的用户请求。
逻辑判断运算符:组合多个条件表达式筛选的用户请求。
您可以根据实际业务需求设置多个条件表达式并组合用于筛选用户请求。
逻辑判断运算符
对同一个层级内的条件(包括被嵌套的条件集合)进行逻辑判断,支持and和or。
and(并且):逻辑与运算符,所有条件都为真才会匹配成功。
or(或者):逻辑或运算符,其中一个条件为真即可匹配成功。
条件表达式
最小粒度的条件表达式包含以下参数:
参数名称 | 对应表达式语法中的参数 | 参数说明 | 是否必填 |
匹配类型 | Field | 条件规则的匹配类型。 | 是 |
匹配值 | Value | 条件规则的匹配值。 | 是 |
匹配运算符 | Comparison_operator | 条件规则的匹配运算符。 | 是 |
表达式语法
简单表达式
语法规则:<field><comparison_operator><value>。
示例:http.request.uri.path matches"/image\.(jpg|png)$"。
复合表达式
加上运算符(logical operators)将多个不同的表达式组合在一起。
语法规则:<expreesion><logical_operator><expression>。
示例:http.host eq "www.example.com" and http.request.uri.path eq "/content"。
匹配类型
主机名(http.host),这个匹配类型在SSL/TLS加密规则中使用的时候,仅支持等于和不等于这两种匹配运算符。
匹配类型 | 匹配类型含义 | 匹配类型变量 | 支持的匹配运算符 | 匹配值 |
请求方法 | 客户端请求使用的请求方法。 | http.request.method |
| 可选值:
|
HTTP 版本 | 客户端请求使用的HTTP版本。 | http.request.version | 可选值:
| |
国家/地区 | 客户端IP地址归属的国家/地区。 | ip.geoip.country |
| |
文件名 | 客户端请求的文件的名称 | http.request.uri.path.file_name |
| |
文件扩展名 | 客户端请求的文件的后缀名。 | http.request.uri.path.extension |
| |
IP源地址 | 客户端的IP。 | ip.src |
| |
SSL/HTTPS | 客户端请求使用的协议类型。 | http.request.scheme |
| 可选值:
|
主机名 | 客户端请求携带的hostname。 匹配顺序:请求URL中的host>请求头HOST中的host。 | http.host |
|
|
URI | 客户端请求URL中的路径,包含请求参数。 | http.request.uri |
| |
主机URI 完整名 | 客户端请求的完整URI。 | http.request.full_uri |
| |
URI 路径 | 客户端请求URL中的路径,不含请求参数。 | http.request.uri.path |
| |
URI 查询字符串 | 客户端请求URL中完整的请求参数。 | http.request.uri.query |
| |
URI 指定查询字符串 | 客户端请求URL中指定的请求参数。 | http.request.uri.args["session"] |
| |
Cookie | 客户端请求携带的Cookie。 | http.cookie |
|
|
用户代理 | 客户端请求携带的客户端信息。 | http.user_agent |
| |
引用方 | 发起客户端请求的原始页面的URL。 | http.referer |
| |
X-Forwarded-For | 客户端请求中X-Forwarded-For标头的值。 | http.x_forwarded_for |
| |
请求标头 | 客户端请求中指定标头。 | http.request.headers["session"] |
| |
Cookie 值 | 客户端请求中指定的Cookie参数。 | http.request.cookies["session"] |
|
匹配运算符
运算符名称 | 运算符 | 是否支持取反 | 值类型 | 备注 |
等于 | eq | 不支持 | string | / |
不等于 | ne | 不支持 | string | / |
包含 | contains | 支持 | string | 包含字符串。 |
与正则表达式匹配 | matches | 支持 | string | 正则匹配: 仅bussiness和enterprise套餐支持正则匹配。 |
值为其中任意一项 | in | 支持 | array | 值为其中任意一项:
|
字符串开头为 | starts_with | 支持 | string | / |
字符串结尾为 | ends_with | 支持 | string | / |
长度小于 | len-lt | 不支持 | integer | 字符串长度小于。 |
长度等于 | len-eq | 不支持 | integer | 字符串长度等于。 |
长度大于 | len-gt | 不支持 | integer | 字符串长度大于。 |
在列表中 | in_list | 支持 | integer | 列表需要在账号维度上新建列表,然后在这里调用。 |
存在 | exists | 支持 | bool | 匹配对象有包含key/value键值对的情况下,用于表示子key存在,例如:在header、cookie、查询字符串等场景。 |
大于 | gt | 不支持 | integer | 整数场景下使用。 |
小于 | lt | 不支持 | integer | 整数场景下使用。 |
大于等于 | ge | 不支持 | integer | 整数场景下使用。 |
小于等于 | le | 不支持 | integer | 整数场景下使用。 |
通配符
通配符号 | 含义 |
| 表示匹配任意1个字符。 |
| 表示匹配任意多个字符。 |
操作步骤
默认使用表达式生成器。
表达式生成器
您可以使用交互式的表达式生成器来配置表达式,这种配置方式更容易上手,但是配置复杂表达式的时会有一些限制。
若是请求方式可以满足您的业务需求,您在下拉框中选择您需要您的请求方式生成器自动生成。
表达式编辑器
您可以在表达式编辑器的输入框内直接输入表达式,这种配置方式的灵活度更高,能够编写更加复杂的表达式。
单击编辑表达式。
在对话框中输入您的表达式即可。