更新时间:2025-08-27 GMT+08:00

规则引擎

使用场景

规则引擎功能通过图形化的方式实现各种规则配置,实现更加灵活、细粒度的规则配置。通过限制触发条件,控制当前配置生效的资源范围,满足多种场景的配置需求。主要适用于以下场景:

  • CDN节点的相关配置不能满足特定的资源配置需求,如个别资源的访问控制条件与全局配置不同等场景。

注意事项

  • 如需使用规则引擎功能,请提交工单申请开通。
  • 单域名最多可配置10条规则。
  • “业务类型”“全站加速”的域名,暂不支持配置规则引擎。
  • 后台有特殊配置的域名暂不支持配置规则引擎。
  • 规则引擎功能和普通功能同时配置时,规则引擎优先级更高。
  • 新增规则默认位于顶部,存在多条规则时顶部优先级大于底部,即如果同时匹配多条规则,高优先级的规则生效。
  • 一个触发条件最多支持三级嵌套,最后一个层级的逻辑运算符只能是“并且”“或者”,不能组合使用。

操作步骤

  1. 登录华为云控制台,在控制台首页中选择“CDN与智能边缘 > 内容分发网络 CDN”,进入CDN控制台。
  2. 在左侧菜单栏中,选择域名管理
  3. 在域名列表中,单击需要修改的域名或域名所在行的“设置”,进入域名配置页面。
  4. 选择“规则引擎”页签,单击“创建规则”,进入配置界面。
  5. 填写“规则名称”,根据触发条件执行操作的指引完成规则配置,单击“确定”,完成规则添加。
    • 规则名称:支持输入1~50个字符。
    • 优先级:优先级取值范围为1-100,数值越大优先级越高。
    图1 创建规则

触发条件

每个触发条件都由“逻辑运算符”“条件规则”组成。

逻辑运算符:同一层级的条件规则(包含嵌套规则)由“并且”“或者”做逻辑判断。

  • 并且:代表必须满足当前层级的所有条件才可触发操作。
  • 或者:代表满足当前层级的某一个条件即可触发操作。

条件规则:每一个条件规则由“条件”“运算符”“值”组成。“条件”“值”用来决定哪些请求需遵循当前规则,“运算符”用来定义哪种情况下该条件规则成立。

运算符:
  • 包含任意一个:用户请求包含条件的任意一个值时,条件成立。
  • 不包含其中任意一个:用户请求完全不包含条件的任意一个值时,条件成立。
  • 存在:用户请求信息中存在当前条件配置的参数时(无论值是什么),条件成立。
  • 不存在:用户请求信息中不存在当前条件配置的参数时(无论值是什么),条件成立。

触发条件规则配置说明

当用户请求匹配了当前的触发条件规则时,将执行当前规则配置的操作。触发条件配置时相关参数解释详见表1

表1 触发条件可配置参数说明

条件

匹配条件含义

名称

运算符

区分大小写(值)

协议类型

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

不涉及

  • 包含任意一个
  • 不包含其中任意一个
  • HTTP
  • HTTPS

不涉及

请求方法

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

不涉及

  • 包含任意一个
  • 不包含其中任意一个

当前支持的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、PATCH、TRACE、CONNECT。

不涉及

URI路径

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

不涉及

  • 包含任意一个
  • 不包含其中任意一个
  • 以“/”作为首字符的URI,如:/test/index.html,不含http(s)://头及域名。

默认区分大小写,关闭“区分大小写”开关后,大写和小写将认为是同一个值。

HTTP请求头

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

请求头名称

  • 当前支持配置单个请求头。
  • 支持大小写字母、数字、“-”、“.”、“_”。
  • 请求头名称不区分大小写,即Expires与EXPIRES代表同一个请求头。
  • 包含任意一个
  • 不包含其中任意一个
  • 存在
  • 不存在
  • 支持选择多个值。

默认区分大小写,关闭“区分大小写”开关后,大写和小写将认为是同一个值。

查询参数

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

请求参数名称

  • 参数名称不区分大小写。
  • 包含任意一个
  • 不包含其中任意一个
  • 存在
  • 不存在
  • 支持输入多个值

默认区分大小写,关闭“区分大小写”开关后,大写和小写将认为是同一个值。

文件名称

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

不涉及

  • 包含任意一个
  • 不包含其中任意一个

支持输入多个值

默认区分大小写,关闭“区分大小写”开关后,大写和小写将认为是同一个值。

文件后缀

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

不涉及

  • 包含任意一个
  • 不包含其中任意一个

支持配置.txt、.doc、.html、.jpg、.png、.svg、.zip、.rar等后缀,可选择或输入多个后缀。

默认区分大小写,关闭“区分大小写”开关后,大写和小写将认为是同一个值。

客户端IP

客户端的IP。

  • 建联IP
  • x-forwarded-for头
  • 包含任意一个
  • 不包含其中任意一个

支持IPv4(如0.0.0.0)、IPv6(如240e:95c:3004:2:3:0:0:XXX)。

支持配置网段(如192.168.XXX.XXX/31)。IPV4的网段支持1~32;IPV6的网段支持1~128。

不涉及

客户端IP版本

IPv4或IPv6。

  • 建联IP
  • x-forwarded-for头
  • 包含任意一个
  • 不包含其中任意一个
  • IPv4
  • IPv6。

不涉及

Nginx变量

当上方所有的变量均无法满足需求时,支持使用Nginx变量来配置,支持的变量有$protocol、$arg_、$http_、$scheme、$uri、$ssl_protocol、$ssl_server_name、$remote_addr、$http2、$request_method、$sent_http_。

注意:

当变量选择“$sent_http_”时,“执行操作”仅能配置“HTTPheader响应头”;反之,仅“执行操作”选择“HTTPheader响应头”时,才可以选择变量“$sent_http_”

Nginx变量名称

  • $开头,支持大小写字母、数字、“_”。
  • 变量名称不区分大小写。
  • 包含任意一个
  • 不包含其中任意一个
  • 存在
  • 不存在
  • 支持数字0-9、字符a-z、A-Z,及特殊符.-_*#!&+|^~'"/:;,=@?<> 。
  • 支持输入多个值。

默认区分大小写,关闭“区分大小写”开关后,大写和小写将认为是同一个值。

User-Agent

请求头中的User-Agent。

不涉及

  • 包含任意一个
  • 不包含其中任意一个
  • 支持数字0-9、字符a-z、A-Z,空格,通配符“*”及特殊符.-_();,/'#!@$^&+=~?"[]。
  • 支持输入多个值。

默认区分大小写,关闭“区分大小写”开关后,大写和小写将认为是同一个值。

执行操作

当客户端请求匹配了触发条件中的规则时,将执行相关配置。当前规则引擎支持的配置详见表2

表2 规则引擎支持的配置项

功能分类

功能名称

说明

基础配置

HTTP header响应头

“高级配置”中的“HTTP header配置(跨域请求)”配置要求一致,生效范围不同:

  • HTTP header响应头:仅对规则匹配的资源生效。
  • HTTP header配置(跨域请求):对域名下所有资源生效。

高级回源

匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的高级回源配置。

回源请求头

匹配了条件规则中触发条件的客户端请求,需要遵循该规则中回源请求头配置。

提升访问安全

访问控制

匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的访问控制配置。当前可配置允许和拒绝。

  • 允许:匹配条件的请求可正常访问资源。
  • 拒绝:匹配条件的请求将被拦截,返回403状态码。

提升命中率

回源URL改写

匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的回源URL改写配置。

改写方式:定义如何获取改写内容,支持配置精确改写和捕获改写。非规则引擎中的回源URL改写功能,匹配方式所有文件、URL路径对应精确改写,通配符对应捕获改写。

缓存规则

匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的缓存规则配置。

访问URL重写

匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的访问URL重写配置。

缓存配置

状态码缓存过期时间

匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的状态码缓存过期时间配置。

浏览器缓存过期时间

匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的浏览器缓存过期时间配置。

IP地址校验模式

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

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

示例:假设客户端真实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。