自定义规则

如果您的业务有特定用户需求或特定应用场景,您可以使用自定义规则来实现。

创建自定义规则

操作流程

  1. 登录ESA控制台

  2. 站点管理页面,单击目标站点名称,或对应站点操作列的详情

  3. 在左侧导航栏,选择流量 > 负载均衡,如果已有负载均衡器,单击编辑。没有现有负载均衡器,单击创建负载均衡器

    image

  4. 在创建或编辑负载均衡器的流程中,选择自定义规则。单击创建自定义规则

    image

  5. 填写规则名称。在当请求匹配规则时,选择一个字段的属性。

    说明
    • 表达式生成器提供了多种常用的请求特征,您可以根据需要灵活选择请求匹配规则并生成表达式。详细信息请参考表达式语法

    • 一个加速域名下支持根据URI路径回不同的源。

    • 在运算符下拉列表中,选择一个运算符。详细信息请参见运算符

    image

  6. 对于则执行,选择响应指定内容修改负载均衡调度策略

    image

    项目

    操作项

    说明

    响应指定内容

    响应的状态码

    默认200,非必填。

    Content Type

    非必填,默认application/octet-stream。

    Location

    非必填,默认不响应该HTTP头部,最大1024字节。

    Body

    非必填,默认为空,即HTTP Body为空。 最大1024字节。

    替代负载均衡器配置

    源地址池

    指定源地址池。

    兜底源地址池

    指定兜底源地址池。

    负载均衡策略

    指定负载均衡策略。

    会话保持

    开启或关闭会话保持功能。

    一级区域地址池

    全球大区级源地址池。

    二级区域地址池

    包含在对应一级区域内的区域级源地址池。

    负载均衡器TTL

    控制数据包在网络中的有效时间。

    结束

    结束负载均衡器自定义规则的匹配和执行。

  7. 单击确认

支持字段及运算符

表达式生成器支持字段

image

字段

说明

客户端IP

客户端来源IP。

Cookie

HTTP Cookie。

主机名

请求的访问Host。

标头

HTTP请求头部。

URI

HTTP URI。

URI查询字符串

URI查询字符串。

URI路径

HTTP URI Path

HTTP版本

HTTP版本。

运营商

客户端IP归属的运营商。

IP协议版本

客户端IP所属的协议版本,包含IPv4、IPv6。

省份

国家之下的一级行政单位。

负载均衡器所在区域

负载均衡器的节点所在区域。

请求时间戳

请求到达节点时对应的时间戳(Unix时间)。

表达式编辑器支持字段

image

匹配类型

匹配类型含义

匹配类型变量

支持的匹配运算符

匹配值

请求方法

客户端请求使用的请求方法。

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

正则匹配:

bussinessenterprise套餐支持正则匹配。

值为其中任意一项

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

整数场景下使用。