规则引擎

规则引擎允许您使用相同的基本语法和配置逻辑在不同的产品功能(例如:缓存、重定向、压缩、回源、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

  • 等于

  • 不等于

  • 包含以下各项

  • 不包含以下各项

可选值:

  • GET

  • POST

  • PURGE

  • PUT

  • HEAD

  • OPTIONS

  • DELETE

  • PATCH

HTTP 版本

客户端请求使用的HTTP版本。

http.request.version

可选值:

  • HTTP/1.0

  • HTTP/1.1

  • HTTP/2.0

  • HTTP/3.0

国家/地区

客户端IP地址归属的国家/地区。

ip.geoip.country

  • 您可以通过下拉列表来选择。

  • 是否支持区分大小写:否

  • 匹配值是否允许配置空字符串:否

文件名

客户端请求的文件的名称

http.request.uri.path.file_name

  • 不包含文件后缀的文件名,如:

    • /a/b 文件名是b

    • /a/b/ 文件名为空

    • /foo.tar.bz2 文件名为foo.tar

    • 128_128.jpg 文件名为128_128

  • 是否支持区分大小写:是

  • 匹配值是否允许配置空字符串:否

文件扩展名

客户端请求的文件的后缀名。

http.request.uri.path.extension

  • 从右向左识别,识别到第一个".",不包含"."。例如:文件foo.tar.bz2的后缀是bz2。

  • 是否支持区分大小写:是

  • 匹配值是否允许配置空字符串:否

IP源地址

客户端的IP。

ip.src

  • 支持填写IPv4格式IP,例如:192.168.X.X

  • 支持填写IPv6格式IP,例如:240e:95c:3004:2:3:0:0:XXX

  • 支持网段方式填写,例如:192.168.XXX.XXX/31

  • 是否支持区分大小写:否

  • 匹配值是否允许配置空字符串:否

SSL/HTTPS

客户端请求使用的协议类型。

http.request.scheme

  • 等于

  • 不等于

可选值:

  • http

  • https

主机名

客户端请求携带的hostname。

匹配顺序:请求URL中的host>请求头HOST中的host。

http.host

  • 等于

  • 不等于

  • 包含字符串

  • 不包含字符串

  • 字符串开头为

  • 字符串结尾为

  • 字符串开头不是

  • 字符串结尾不是

  • 与正则表达式匹配

  • 与正则表达式不匹配

  • 值为其中任意一项

  • 值不为其中任意一项

  • 例如:["www1.alibaba.com","www2.alibaba.com"]

  • 是否支持区分大小写:否

  • 匹配值是否允许配置空字符串:否

URI

客户端请求URL中的路径,包含请求参数。

http.request.uri

  • 例如:/articles/index?section=330688&expand=comments

  • 是否支持区分大小写:是

  • 匹配值是否允许配置空字符串:否

主机URI 完整名

客户端请求的完整URI。

http.request.full_uri

  • 例如:htt­ps://www.example.org/articles/index?section=330688&expand=comments

  • 是否支持区分大小写:是

  • 匹配值是否允许配置空字符串:否

URI 路径

客户端请求URL中的路径,不含请求参数。

http.request.uri.path

  • 例如:/articles/index

  • 是否支持区分大小写:是

  • 匹配值是否允许配置空字符串:否

URI 查询字符串

客户端请求URL中完整的请求参数。

http.request.uri.query

  • 例如:section=330688&expand=comments

  • 是否支持区分大小写:是

  • 匹配值是否允许配置空字符串:否

URI 指定查询字符串

客户端请求URL中指定的请求参数。

http.request.uri.args["session"]

  • 支持输入指定查询字符串的参数名称,对指定参数的值进行匹配,例如:参数session的值330688。

  • 是否支持区分大小写:是

  • 匹配值是否允许配置空字符串:是

    说明

    仅在如下匹配运算符时支持空值:

    • 等于

    • 不等于

    • 包含

    • 与正则表达式匹配

Cookie

客户端请求携带的Cookie。

http.cookie

  • 等于

  • 不等于

  • 包含字符串

  • 不包含字符串

  • 与正则表达式匹配

  • 与正则表达式不匹配

  • 例如:session=330688;background=light。

  • 是否支持区分大小写:是

  • 匹配值是否允许配置空字符串:是

用户代理

客户端请求携带的客户端信息。

http.user_agent

  • 例如:curl/7.29.0。

  • 是否支持区分大小写:是

  • 匹配值是否允许配置空字符串:是

引用方

发起客户端请求的原始页面的URL。

http.referer

  • 例如:http://refer.com.cn。

  • 是否支持区分大小写:否

  • 匹配值是否允许配置空字符串:是

X-Forwarded-For

客户端请求中X-Forwarded-For标头的值。

http.x_forwarded_for

  • 例如:192.168.1.X,192.168.2.X

  • 是否支持区分大小写:是

  • 匹配值是否允许配置空字符串:是

请求标头

客户端请求中指定标头。

http.request.headers["session"]

  • 支持输入指定标头名称,对指定请求标头的值进行匹配,例如:标头session的值330688。

  • 是否支持区分大小写:是

  • 匹配值是否允许配置空字符串:是

Cookie 值

客户端请求中指定的Cookie参数。

http.request.cookies["session"]

  • 支持输入指定Cookie参数,对指定Cookie参数的值进行匹配,例如:参数session的值330688。

  • 是否支持区分大小写:是

  • 匹配值是否允许配置空字符串:是

匹配运算符

运算符名称

运算符

是否支持取反

值类型

备注

等于

eq

不支持

string

/

不等于

ne

不支持

string

/

包含

contains

支持

string

包含字符串。

与正则表达式匹配

matches

支持

string

正则匹配:

仅bussiness和enterprise套餐支持正则匹配。

值为其中任意一项

in

支持

array

值为其中任意一项:

  • 不支持通配符。

  • 值需要限制数组里面的对象最多32个。

字符串开头为

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个字符。

*

表示匹配任意多个字符。

操作步骤

说明

默认使用表达式生成器。

表达式生成器

您可以使用交互式的表达式生成器来配置表达式,这种配置方式更容易上手,但是配置复杂表达式的时会有一些限制。

若是请求方式可以满足您的业务需求,您在下拉框中选择您需要您的请求方式生成器自动生成。

image

表达式编辑器

您可以在表达式编辑器的输入框内直接输入表达式,这种配置方式的灵活度更高,能够编写更加复杂的表达式。

  1. 单击编辑表达式。

    image

  2. 在对话框中输入您的表达式即可。

    image