规则引擎

更新时间:2024-11-14 02:44:38

概述

规则引擎功能能够使用图形化的方式来配置各种条件规则。条件规则支持对用户请求中携带的各种参数信息进行识别,以此来决定某个配置是否对该请求生效,可用于更加灵活、更加精确地控制CDN的各种配置策略的执行效果。

背景说明

阿里云CDN产品控制台提供了配置缓存过期时间、回源参数改写等诸多基础功能,这些基础功能可以满足大部分常见的通用需求,但是还有一些需求是基础功能无法满足的。例如:将包含路径/example的请求回源到指定源站地址。类似这样的需求,就需要基础功能搭配规则引擎,才可以实现较为灵活的自定义配置。另外,阿里云CDN产品还提供了边缘脚本功能,能够实现高度灵活的用户定制需求。

配置能力

基础功能

基础功能+规则引擎

边缘脚本(可编程CDN)

功能实现

常见的通用功能配置

较为灵活的自定义配置

高度灵活的自定义配置

使用场景

常见的通用需求

部分自定义高级配置需求

定制化的用户需求

上手难度(对用户技术要求)

配置灵活性

注意事项

  • 单个域名下的规则引擎功能最大支持创建50个规则条件。

  • 单个规则条件中的子条件数量最大不超过20个。

  • 通过控制台或者OpenAPI来配置的情况下,无法使用正则相关的匹配运算符(包括正则匹配和正则不匹配),但是可以查看已经存在的配置。

  • 通过控制台或者OpenAPI来配置的情况下,单个域名下所有功能对规则条件的总引用次数最大不超过5次。

  • 规则条件支持嵌套,嵌套层次深度最大限制为3层,不同层级支持独立的逻辑关系设置。

规则条件的语法说明

一个规则条件由“逻辑判断运算符”与“条件表达式”构成,具体见下方说明。

逻辑判断(Logic)

对同一个层级内的条件(包括被嵌套的条件集合)进行逻辑判断,支持andor。

  • and(并且):逻辑与运算符,所有条件都为真才会匹配成功。

  • or(或者):逻辑或运算符,其中一个条件为真即可匹配成功。

条件表达式包含的参数

最小粒度的条件表达式包含以下参数:

参数名称

域名配置功能函数condition中对应的配置参数

参数说明

是否必填

参数名称

域名配置功能函数condition中对应的配置参数

参数说明

是否必填

条件匹配

match

表示条件匹配表达式。

逻辑判断

logic

表示条件匹配表达式的逻辑判断参数,取值为andor。

条件判断内容

criteria

表示条件表达式的判断内容。

匹配类型

MatchType

表示对用户请求中携带的某一类型信息进行匹配。

匹配对象

MatchObject

表示对匹配类型进行进一步的细分,例如:客户端IP可以进一步细分为“建联IP”和“XFF IP”。

匹配运算符

MatchOperator

表示匹配操作执行的具体动作。

匹配值

MatchValue

表示预先设定的匹配值,将会与用户请求中携带的信息进行匹配。

条件判断值取反

negate

表示是否对条件表达式的结果取反,取值为truefalse。

大小写敏感

caseSensitive

表示对匹配值中的字符是否大小写敏感。

规则条件名称

name

表示规则条件的名称。

生效状态

status

表示规则条件的生效状态。

条件表达式的配置方法

匹配类型名称

域名配置功能函数condition中对应的配置参数

匹配类型含义

匹配对象

匹配运算符

匹配值

大小写敏感

对应nginx/tengine

匹配类型名称

域名配置功能函数condition中对应的配置参数

匹配类型含义

匹配对象

匹配运算符

匹配值

大小写敏感

对应nginx/tengine

协议类型

scheme

客户端请求使用的协议类型,例如:HTTP、HTTPS。

不涉及

  • 等于

  • 不等于

  • http

  • https

不涉及

$scheme

请求方法

method

客户端请求使用的请求方法,例如:GET、PUT。

不涉及

  • 等于

  • 不等于

  • get

  • put

  • post

  • delete

  • head

不涉及

$request_method

URI(路径)

uri

客户端请求URL中的路径,不含请求参数,例如:/favicon.ico

不涉及

  • 包含其中任意一个

  • 不包含其中任意一个

支持通配符?*, 例如:填写 /*/my_path/*,支持输入多个值。

  • 区分大小写

  • 忽略大小写

$raw_uri或$uri

文件名

basename

客户端请求的文件的名称,例如:name1。

不涉及

  • 包含其中任意一个

  • 不包含其中任意一个

支持通配符?*,支持输入多个值。

  • 区分大小写

  • 忽略大小写

-

文件扩展名

extension

客户端请求的文件的后缀名,从右向左识别,识别到第一个".",例如:.mp4

不涉及

  • 包含其中任意一个

  • 不包含其中任意一个

支持通配符?*,支持输入多个值。

  • 区分大小写

  • 忽略大小写

-

Hostname

hostname

客户端请求携带的hostname,匹配顺序:请求URL中的host>请求头HOST中的host。

不涉及

  • 包含其中任意一个

  • 不包含其中任意一个

用户请求的host,支持输入多个值。

  • 区分大小写

  • 忽略大小写

$host或$http_host

客户端IP

clientip

客户端的IP。 支持IPv4(例如1.1.X.X)、IPv6(例如240e:95c:3004:2:3:0:0:XXX)、支持网段(例如20.209.XXX.XXX/31)。

  • 建联IP

  • XFF IP

说明

建联IP、XFF IP详细说明,请参见IP地址校验模式

  • 包含其中任意一个

  • 不包含其中任意一个

支持填写IPv6格式IP,例如:240e:XXX:3004:2:3:0:0:3f7,支持网段方式填写,例如:120.209.XXX.XXX/31,支持输入多个值。

不涉及

$remote_addr

客户端IP版本

clientipVer

IPv4IPv6。

  • 建联IP

  • XFF IP

说明

建联IP、XFF IP详细说明,请参见IP地址校验模式

  • 等于

  • 不等于

  • v4

  • v6

不涉及

-

用户网络运营商

geolocation

客户端IP归属的运营商。

  • 建联IP

  • XFF IP

说明

建联IP、XFF IP详细说明,请参见IP地址校验模式

  • 包含其中任意一个

  • 不包含其中任意一个

可以通过下拉列表来选择,可以输入字符来过滤选项,支持输入ID或名称来模糊匹配查询,支持输入多个值。

不涉及

$ip_isp_id

用户IP地理位置

geolocation

客户端IP所处的地理位置。

  • 建联IP

  • XFF IP

说明

建联IP、XFF IP详细说明,请参见IP地址校验模式

  • 包含其中任意一个

  • 不包含其中任意一个

可以通过下拉列表来选择,可以输入字符来过滤选项,支持输入ID或名称来模糊匹配查询,支持输入多个值。

不涉及

$ip_country_id

请求参数

querystring

用户请求URL中携带的请求参数。

输入参数名称。

  • 存在

  • 不存在

  • 包含其中任意一个

  • 不包含其中任意一个

  • 大于

  • 大于等于

  • 小于

  • 小于等于

支持通配符?*,支持输入多个值。

  • 区分大小写

  • 忽略大小写

$arg_{name}

请求头

header

用户请求中携带的请求头。

支持输入参数名称,也支持通过下拉列表来选择参数。

  • 存在

  • 不存在

  • 包含其中任意一个

  • 不包含其中任意一个

  • 大于

  • 大于等于

  • 小于

  • 小于等于

支持输入多个值。

  • 区分大小写

  • 忽略大小写

$http_{name}

Cookie

cookie

请求携带的Cookie。

输入Cookie名称。

  • 存在

  • 不存在

  • 包含其中任意一个

  • 不包含其中任意一个

  • 大于

  • 大于等于

  • 小于

  • 小于等于

支持通配符?*,支持输入多个值。

  • 区分大小写

  • 忽略大小写

$cookie_{name}

User-Agent

useragent

请求头里的User-Agent。

不涉及

  • 包含其中任意一个

  • 不包含其中任意一个

可以选择下拉列表中的值,或者直接输入UA值,例如:*Chrome/25*,支持通配符?*,支持输入多个值(最多仅支持配置32UA,超过这个数量后,配置的UA不生效)。

  • 区分大小写

  • 忽略大小写

$http_user_agent

Range分桶

range

将客户端请求分桶,按百分比执行。

不涉及

  • 等于

  • 不等于

输入百分比的数值。

不涉及

-

时间

time

客户端请求发生的时间,时区为东八区(北京时间),例如:09:10~14:22。

不涉及

  • 包含其中任意一个

  • 不包含其中任意一个

直接输入时间段,例如09:10~14:22 ,表示910分至1422分。

不涉及

-

Nginx Var

ngxvar

当上方所有的变量均无法满足需求时,支持使用Nginx变量来配置,支持的变量详见Nginx官网:Nginx变量

可以通过下拉列表来选择或直接输入变量名,支持$region:$isp这种拼接方式。

  • 存在

  • 不存在

  • 包含其中任意一个

  • 不包含其中任意一个

  • 大于

  • 大于等于

  • 小于

  • 小于等于

支持输入多个值。

不涉及

${name}

IP地址校验模式

规则引擎功能的“IP地址校验模式”分为两种,使用不同的“IP地址校验模式”会影响到CDN节点对客户端IP的判断:

  • 建联 IP:该模式匹配的是客户端与CDN节点之间建连使用的IP,如果客户端与CDN节点之间有经过代理服务器,那么建联IP=代理服务器IP。

  • XFF IP:该模式匹配的是用户请求中x-forwarded-for请求头携带的左边第一个IP,不论客户端与CDN节点之间是否有经过代理服务器,XFF IP都=客户端真实IP。

选择使用哪一种“IP地址校验模式”主要取决于用户请求在经过CDN节点时,中间是否有经过代理服务器。

需要注意,引用规则条件的功能在CDN节点上的生效位置也会影响到对“IP地址校验模式”的选择(对于在L2节点上生效的回源配置相关功能而言,用户请求经过的L1节点就相当于中间经过了代理服务器)。

示例:假设客户端真实IP10.10.10.10,代理服务器IP192.168.0.1

  • 没有经过代理服务器:

    • 用户请求中x-forwarded-for请求头值:10.10.10.10

    • 客户端真实IP(即x-forwarded-for请求头携带的左边第一个IP)=客户端与CDN节点建连IP=10.10.10.10

  • 经过代理服务器:

    • 用户请求中x-forwarded-for请求头值:10.10.10.10,192.168.0.1

    • 客户端真实IP(即x-forwarded-for请求头携带的左边第一个IP)=10.10.10.10

    • 客户端与CDN节点建连IP=代理服务器IP=192.168.0.1

    • 客户端真实IP(即x-forwarded-for请求头携带的左边第一个IP)≠客户端与CDN节点建连IP。

少数ISP在特定区域可能会分配私有IP地址给用户端,导致CDN节点接收到的是用户的私有IP地址。

说明

私有IP地址范围有以下三个:

  • A类私有IP地址:10.0.0.0~10.255.255.255,子网掩码:10.0.0.0/8

  • B类私有IP地址:172.16.0.0~172.31.255.255,子网掩码:172.16.0.0/12

  • C类私有IP地址:192.168.0.0~192.168.255.255,子网掩码:192.168.0.0/16

匹配运算符(matchOperator)

名称

域名配置功能函数condition中对应的配置参数

含义

名称

域名配置功能函数condition中对应的配置参数

含义

等于

matchOperatorequals。

变量完全等于匹配值或者完全不等于匹配值的时候,条件才成立。

不等于

matchOperatorequals,并且参数negate的值为true。

存在

matchOperatorexists。

变量存在或者不存在时,条件即成立。

不存在

matchOperatorexists,并且参数negate的值为true。

包含其中任意一个

matchOperatorcontains。

变量包含(不包含)任意一个匹配值的时候,条件即成立。最多支持32个匹配值。

包含匹配的情况有两种:

  • 精确匹配:直接输入匹配对象,包含:a,必须=a才能匹配上。

  • 通配符匹配:可以加入*作为通配符,可以支持配置a**a*a*,可以对应abc、bca、bcabc。

不包含其中任意一个

matchOperatorcontains,并且参数negate的值为true。

大于

matchOperatorgt。

>

小于

matchOperatorlt。

<

大于等于

matchOperatorge。

>=

小于等于

matchOperatorle

<=

正则匹配

matchOperatorregex。

匹配值可以填写正则表达式,实现对变量的正则匹配。

说明

通过控制台或者OpenAPI来配置的情况下,无法使用正则相关的匹配运算符(包括正则匹配和正则不匹配),但是可以查看已经存在的配置。

正则不匹配

matchOperatorregex,并且参数negate的值为true。

通配符

通配符号

含义

通配符号

含义

?

表示匹配任意1个字符。

*

表示匹配任意多个字符。

当前支持引用规则条件的功能

操作步骤

  1. 登录CDN控制台

  2. 在左侧导航栏,单击域名管理

  3. 域名管理页面,找到目标域名,单击操作列的管理

  4. 在指定域名的左侧导航栏,单击规则引擎

  5. 单击添加规则

  6. 添加规则页面,设置规则名称规则内容

  7. 单击提交,完成配置。

  • 本页导读 (1)
  • 概述
  • 背景说明
  • 注意事项
  • 规则条件的语法说明
  • 逻辑判断(Logic)
  • 条件表达式包含的参数
  • 条件表达式的配置方法
  • IP地址校验模式
  • 匹配运算符(matchOperator)
  • 通配符
  • 当前支持引用规则条件的功能
  • 操作步骤