规则引擎功能使用图形化方式配置条件规则。条件规则支持识别用户请求中的各种参数信息,以决定某个配置是否对该请求生效,可用于灵活、精确地控制CDN的配置策略执行效果。
背景说明
阿里云CDN产品控制台提供了配置缓存过期时间、回源参数改写等基础功能,满足大部分通用需求。但对于一些特殊需求,如将包含路径/example的请求回源到指定源站地址,则需要结合规则引擎实现自定义配置。此外,阿里云CDN还提供了边缘脚本功能,支持高度灵活的用户定制需求。
| 配置能力 | 基础功能 | 基础功能+规则引擎 | 边缘脚本 | 
| 功能实现 | 常见的通用功能配置 | 较为灵活的自定义配置 | 高度灵活的自定义配置 | 
| 使用场景 | 常见的通用需求 | 部分自定义高级配置需求 | 定制化的用户需求 | 
| 上手难度(对用户技术要求) | 低 | 中 | 高 | 
| 配置灵活性 | 低 | 中 | 高 | 
注意事项
规则条件的语法说明
一个规则条件由“逻辑判断运算符”与“条件表达式”构成,具体见下方说明。
逻辑判断(Logic)
对同一个层级内的条件(包括被嵌套的条件集合)进行逻辑判断,支持and和or。
- and(并且):逻辑与运算符,所有条件都为真才会匹配成功。
- or(或者):逻辑或运算符,其中一个条件为真即可匹配成功。
条件表达式包含的参数
最小粒度的条件表达式包含以下参数:
| 参数名称 | 域名配置功能函数condition中对应的配置参数 | 参数说明 | 是否必填 | 
| 条件匹配 | match | 表示条件匹配表达式。 | 是 | 
| 逻辑判断 | logic | 表示条件匹配表达式的逻辑判断参数,取值为 | 是 | 
| 条件判断内容 | criteria | 表示条件表达式的判断内容。 | 是 | 
| 匹配类型 | MatchType | 表示对用户请求中携带的某一类型信息进行匹配。 | 是 | 
| 匹配对象 | MatchObject | 表示对匹配类型进行进一步的细分,例如:客户端IP可以细分为“建联IP”和“XFF IP”。 | 否 | 
| 匹配运算符 | MatchOperator | 表示匹配操作执行的具体动作。 | 是 | 
| 匹配值 | MatchValue | 表示预先设定的匹配值,将会与用户请求中携带的信息进行匹配。 | 是 | 
| 条件判断值取反 | negate | 表示是否对条件表达式的结果取反,取值为true和false。 | 是 | 
| 大小写敏感 | caseSensitive | 表示对匹配值中的字符是否大小写敏感。 | 否 | 
| 规则条件名称 | name | 表示规则条件的名称。 | 是 | 
| 生效状态 | status | 表示规则条件的生效状态。 | 是 | 
条件表达式的配置方法
| 匹配类型名称 | 域名配置功能函数condition中对应的配置参数 | 匹配类型含义 | 匹配对象 | 匹配运算符 | 匹配值 | 大小写敏感 | 对应nginx/tengine | 
| 协议类型 | scheme | 客户端请求使用的协议类型,例如:HTTP、HTTPS。 | 不涉及 | 
 | 
 | 不涉及 | $scheme | 
| 请求方法 | method | 客户端请求使用的请求方法,例如:GET、PUT。 | 不涉及 | 
 | 
 | 不涉及 | $request_method | 
| URI(路径) | uri | 客户端请求URL中的路径,不含请求参数,例如: | 不涉及 | 
 | 支持通配符 | 
 | $raw_uri或$uri | 
| 文件名 | basename | 客户端请求的文件的名称,例如:name1。 | 不涉及 | 
 | 支持通配符 | 
 | - | 
| 文件扩展名 | extension | 客户端请求的文件的后缀名,从右向左识别,识别到第一个".",例如: | 不涉及 | 
 | 支持通配符 | 
 | - | 
| Hostname | hostname | 客户端请求携带的hostname,匹配顺序:请求URL中的host>请求头HOST中的host。 | 不涉及 | 
 | 用户请求的host,支持输入多个值。 | 
 | $host或$http_host | 
| 客户端IP | clientip | 客户端的IP。 支持IPv4(例如 | 
 说明  建联IP、XFF IP详细说明,请参见IP地址校验模式。 | 
 | 支持填写IPv6格式IP,例如:240e:XXX:3004:2:3:0:0:3f7,支持网段方式填写,例如:120.209.XXX.XXX/31,支持输入多个值。 | 不涉及 | $remote_addr | 
| 客户端IP版本 | clientipVer | IPv4或IPv6。 | 
 说明  建联IP、XFF IP详细说明,请参见IP地址校验模式。 | 
 | 
 | 不涉及 | - | 
| 用户网络运营商 | geolocation | 客户端IP归属的运营商。 | 
 说明  建联IP、XFF IP详细说明,请参见IP地址校验模式。 | 
 | 可以通过下拉列表来选择,可以输入字符来过滤选项,支持输入ID或名称来模糊匹配查询,支持输入多个值。 | 不涉及 | $ip_isp_id | 
| 用户IP地理位置 | geolocation | 客户端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值,例如: | 
 | $http_user_agent | 
| Range分桶 | range | 将客户端请求分桶,按百分比执行。 | 不涉及 | 
 | 输入百分比的数值。 | 不涉及 | - | 
| 时间 | time | 客户端请求发生的时间,时区为东八区(北京时间),例如:09:10~14:22。 | 不涉及 | 
 | 直接输入时间段,例如09:10~14:22 ,表示9点10分至14点22分。 | 不涉及 | - | 
| Nginx Var | ngxvar | 当上方所有的变量均无法满足需求时,支持使用Nginx变量来配置,支持的变量详见Nginx官网:Nginx变量。 | 可以通过下拉列表来选择或直接输入变量名,支持 | 
 | 支持输入多个值。 | 不涉及 | ${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节点就相当于中间经过了代理服务器)。
示例:假设客户端真实IP为10.10.10.10,代理服务器IP为192.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中对应的配置参数 | 含义 | 
| 等于 | matchOperator为equals。 | 变量完全等于匹配值或者完全不等于匹配值的时候,条件才成立。 | 
| 不等于 | matchOperator为equals,并且参数negate的值为true。 | |
| 存在 | matchOperator为exists。 | 变量存在或者不存在时,条件即成立。 | 
| 不存在 | matchOperator为exists,并且参数negate的值为true。 | |
| 包含其中任意一个 | matchOperator为contains。 | 变量包含(不包含)任意一个匹配值的时候,条件即成立。最多支持32个匹配值。 包含匹配的情况有两种: 
 | 
| 不包含其中任意一个 | matchOperator为contains,并且参数negate的值为true。 | |
| 大于 | matchOperator为gt。 | 即 | 
| 小于 | matchOperator为lt。 | 即 | 
| 大于等于 | matchOperator为ge。 | 即 | 
| 小于等于 | matchOperator为le | 即 | 
| 正则匹配 | matchOperator为regex。 | 匹配值可以填写正则表达式,实现对变量的正则匹配。 | 
| 正则不匹配 | matchOperator为regex,并且参数negate的值为true。 | 
通配符
| 通配符号 | 含义 | 
| 
 | 表示匹配任意1个字符。 | 
| 
 | 表示匹配任意多个字符。 | 
当前支持引用规则条件的功能
| 功能分类 | 功能名称 | 
| 基本配置 | |
| 缓存配置 | |
| 回源配置 | |
| 访问控制 | |
| 性能优化 | |
| 视频相关 | |
| 流量限制 | 
操作步骤
- 登录CDN控制台。 
- 在左侧导航栏,单击域名管理。 
- 在域名管理页面,找到目标域名,单击操作列的管理。 
- 在指定域名的左侧导航栏,单击规则引擎。 
- 单击添加规则。 
- 在添加规则页面,设置规则名称和规则内容。 
- 单击提交,完成配置。