转发规则可以将客户端请求按指定条件路由到不同的后端主机组,并对后端主机响应结果进行处理后返回给客户端。
转发规则概述
您可以为ALB实例的一个监听器添加转发规则。一条转发规则由转发条件(condition)和转发动作(action)两部分组成:转发条件用于匹配请求数据,转发动作按照匹配结果执行对应的处理。一条转发规则中可以定义一个或多个转发条件以及一个或多个转发动作。
按数据链路方向,当前ALB支持请求方向转发规则,不支持响应方向转发规则。
每条转发规则必须包含一条转发至、重定向至或返回固定响应类型的转发动作,以保证客户端请求不会中断。
基础版实例支持的转发规则
| 分类 | 转发条件 | 转发动作 |
|---|---|---|
| 请求方向 | 域名、路径 | 转发至、重定向至 |
标准版实例支持的转发规则
| 分类 | 转发条件 | 转发动作 |
|---|---|---|
| 请求方向 | 域名、路径、HTTP标头、查询字符串、HTTP 请求方法、Cookie和源IP(SourceIp) | 转发至、重定向至、返回固定响应、重写、写入Header、删除Header |
说明
重写、写入Header、删除Header这三个动作只有在转发至条件下才能使用。
匹配原理
匹配策略:每个客户端请求会按照转发规则的优先级顺序(转发规则编号的数值越小,优先级越高,范围1-10000)逐条匹配,一旦能够匹配到一条转发规则,立即按照当前转发规则转发流量。
默认转发规则:每个七层协议的监听器创建后,都会有一条默认的转发规则将请求转发到监听器默认的后端主机组(即创建监听器时配置的后端主机组)。默认转发规则不需要配置优先级,系统视为最低优先级。
如果在请求方向未匹配到其他转发规则,客户端请求将会按照监听默认转发规则转发。
默认转发规则的优先级最低且不参与转发规则排序。可以修改默认的后端主机组,但不可删除默认转发规则。
说明
路径如果配置为/*,表示匹配所有路径的请求。如果您需要一条兜底的转发规则用于处理非预期的请求,转发条件中路径可以配置为/*,转发动作配置为返回固定响应,状态码设置为404或403,配置完成后将该转发规则的优先级数值调整为最大。
一条转发规则中转发条件之间的逻辑关系:一条转发规则中可以配置多个转发条件,不同类型的转发条件之间为"与"(AND)关系;同一类型转发条件的多个值之间为"或"(OR)关系。
一条转发规则中的不同转发条件之间为"与":例如一条规则同时配置了域名条件*.example.com和路径条件/test/*,则请求必须同时满足域名和路径两个条件才会匹配该规则。仅满足域名或仅满足路径均不会匹配。
同一个转发条的多值之间为"或":例如域名条件添加了www.example.com和www.test.com两个值,则请求域名匹配其中任意一个即满足该域名条件。
转发规则优先级:转发规则按照优先级从高到低排序,转发规则编号的数值越小优先级越高。
以下示例说明多条转发规则的匹配过程:
| 优先级 | 转发条件 | 转发动作 | 说明 |
|---|---|---|---|
| 1 | 域名:api.test.com,路径:/v2/* | 转发至后端主机组 A | 精确域名 + 路径通配,优先级最高 |
| 2 | 域名:api.test.com,路径:/* | 转发至后端主机组 B | 精确域名 + 所有路径,优先级次之 |
| 3 | 域名:*.test.com | 转发至后端主机组 C | 通配域名,优先级再次之 |
| 默认 | -(匹配所有请求) | 转发至后端主机组 D | 兜底规则,优先级最低 |
请求api.test.com/v2/users匹配规则 1,转发至后端主机组A。
请求api.test.com/v1/users不匹配规则 1(路径不满足/v2/*),匹配规则 2,转发至后端主机组B。
请求web.test.com/index不匹配规则 1、2(域名不满足),匹配规则 3,转发至后端主机组C。
请求other.com/page不匹配任何规则,按默认规则转发至后端主机组D。
ALB支持的转发条件
| 转发条件 | 说明 |
|---|---|
| 域名 | 匹配说明 触发转发的域名,可以并列添加多个域名。域名由以点分隔的字符串组成,单个字符串不超过63个字符,域名总长度不能超过100个字符。 匹配方式 精确匹配及通配符匹配:只能由英文字母、数字和特殊字符.-?=~_+\^*!$&|()[]组成,支持星号(*)和半角问号(?)作为通配符使用。不支持以.开头和结尾,不支持..的形式。 |
| 路径(URL) | 匹配说明 触发转发的路径,可以并列添加多个路径。路径由英文字母、数字和特殊字符_~';@^-%#$.*+?,=!:|\/()[]{}组成,长度范围为1~128个字符。 匹配方式 精确匹配:请求的路径和设定路径完全一致,只能由/开头。 前缀匹配:请求的路径匹配已设定路径的开头,只能由/开头。 正则匹配:请求的路径和设定的路径正则表达式匹配。 示例: 请求链接为:https://www.test.com/login.php?locale=zh-cn#videos 转发规则选择“路径”时,填写:/login.php |
| 查询字符串 | 当请求中的字符串与设置好的转发策略中的字符串相匹配时,触发转发。 查询字符串是键值对的形式,需要分别设置值: 键(key):只能包含英文字母、数字和特殊字符!$'()*+,./:;=?@^-_'。 值(value):一个键下可以配置多个值。只能包含英文字母、数字和特殊字符!$'()*+,./:;=?@^-_'。支持*和?作为通配符使用。 示例: 请求链接为:https://www.test.com/login.php?locale=zh-cn#videos 转发规则需配置“查询字符串”: 键(key):locale 值(value):zh-cn |
| HTTP请求方法 | 触发转发的HTTP请求方法。 可以并列设置多个请求方法。 主要分为以下几种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS 示例: PUT |
| HTTP请求头 | 触发转发的HTTP请求头。 请求头是键值对的形式,需要分别设置值: 键(key):只能由英文字母、数字、下划线和中划线组成。 说明: HTTP请求头User-agent和Connection仅支持首字母大写的形式。 值(value):一个键下可以配置多个值。只能包含英文字母、数字和特殊字符!#$%&'()*+,.\/:;<=>?@[]^-_'{|}~。支持*和?作为通配符使用。 示例: 键(key):Accept-Language 值(value):zh-CN |
| Cookie | 触发转发的Cookie。 Cookie是键值对的形式,需要分别设置值: 键(key):键的长度为1~100个字符,且首尾字符不能为空格。 值(value):一个键下配置一个值,值的长度为1~100个字符。 支持输入多个Cookie键值对,键值对支持英文字母、数字和特殊字符!%'"()*+,./:=?@^-_`~。 示例: 键(key):Cookie_name 值(value):Cookie_value |
| 源IP(SOURCE IP) | 触发转发的请求网段。 示例: 10.0.0.0/24 |
ALB支持的转发动作
| 转发动作 | 说明 |
|---|---|
| 转发至 | 如果满足转发规则的转发条件,则将请求转发至配置好的后端主机组。 您可以添加多个后端主机组,且必须为每个后端主机组配置权重,请求将根据配置的权重值转发至不同的后端主机组。支持配置的权重值为0~256的整数。 支持开启后端服务器组间会话保持并设置会话保持超时时间。 会话保持超时时间的取值范围为1~86400S。 |
| 重定向 | 如果满足转发规则的条件,则将请求重定向至配置好的URL。 客户端访问ALB网址A后,ALB返回302或者其他3xx返回码和目的网址B,客户端自动跳转到网址B,网址B可自定义。 需要设置如下参数,其中协议、域名、端口和路径至少设置一条。 协议:可以选择“${protocol}”或“HTTP”或“HTTPS”。${protocol}表示与源协议相同。 域名:至少包含两个字符串,字符串间以点分隔,字符串只能由英文字母、数字、中划线和小数点组成。字符串必须以英文字母或数字开头,不能以中划线结尾。${host}表示与源域名相同。 端口:取值范围是1~65535。${port}表示与源端口相同。 路径:由英文字母、数字和特殊字符_~';@^-%#&$.*+?,=!:|\/()[]{}组成,只能由/开头。${path}表示与源路径相同。 查询字符串:只能包含英文字母、数字和特殊字符!$'()*+,./:;=?@&^-_',&仅支持作为分隔符使用。 返回码:可以选择“301”、“302”、“303”、“307”、“308”。 示例: 重定向的链接为:http://www.test.com/index.html?locale=zh-cn#videos 协议:HTTP 域名:www.test.com 端口:8081 路径:/index.html 查询字符串:locale=zh-cn 返回码:301 |
| 重定向至监听器 | 如果满足转发规则的条件,则将请求转发至配置好的监听器上。 |
| 返回固定响应 | 如果满足转发规则的转发条件,则返回固定响应。 用户访问ALB实例后,ALB直接返回响应,不向后端主机继续转发,返回响应的状态码和内容可以自定义。 需要设置如下参数: 返回码:默认支持2XX、4XX、5XX系列状态码。 Content-Type:可以选择“text/plain”、“text/css”、“text/html”、“application/javascript”、“application/json”。 响应正文:非必填项,取值范围是0~1024个字符。 |
| 重写 | 如果满足转发规则的转发条件,则将请求重写为配置好的URL后再访问后端主机组。 需要设置如下参数: 域名:至少包含两个字符串,字符串间以点分隔,字符串只能由英文字母、数字、中划线和小数点组成。字符串必须以英文字母或数字开头,不能以中划线结尾。如果您使用特殊字符{},仅支持${host}的格式,表示与源域名相同。 路径:由英文字母、数字和特殊字符_~';@^-%#&$.*+?,=!:|\/()[]{}组成,只能由/开头。如果您使用特殊字符{},仅支持${path}的格式,表示与源路径相同。 说明: 转发规则选择路径的正则匹配后,转发动作“重定向至URL”和“重写”中的路径支持正则表达式替换。路径替换规则详情见转发动作的路径支持URL的正则表达式示例。 查询字符串:只能包含英文字母、数字和特殊字符!$'()*+,./:;=?@&^-_',&仅支持作为分隔符使用。 说明: 重写类型的转发动作中域名、路径和查询字符串不能全部为空或者默认值。 |
| 写入Header | 通过ALB转发的请求中,如客户端IP地址、客户端端口、ALB实例监听端口等信息在请求中的Header键是固定的。如果用户业务需要使用这些信息,但是业务又无法直接识别请求中原有的Header键,可以使用写入Header方式。 写入Header支持输入头字段名称(Key)和头字段内容(value),将覆盖请求中已有的头变量。 Header是键值对的形式,需要分别设置值: 键(Key)的长度为1~40个字符,只能由英文字母、数字、下划线(_)和中划线(-)组成,一个键下可以配置多个值。Key不能设置成以下值: x-forwarded-for x-forwarded-proto x-forwarded-port x-forwarded-host 值(value):支持用户指定、系统定义和引用三种类型。 用户指定:用户定义value内容。 限制为:值长度限制为1-128个字符,支持可打印字符,字母支持大小写字母,开头和结尾不能为空格,不支持双引号,不支持以反斜杠结尾 系统定义:引用原有请求中系统定义的如下某个Header的值(value)作为新增Header 的值(value)。 支持客户端端口、客户端IP地址、客户端请求协议、ALB衡实例ID、ALB实例监听器端口 引用:引用原有请求中的某个Header的值(value)作为新增Header 的值(value)。 只能由小写英文字母、数字、下划线和中划线组成。 |
| 删除Header | 如果满足转发规则的条件,则将在请求中删除配置的Header后再访问后端主机组。 输入Header头字段名称,将删除请求Header中对应的键值对内容。 键(key):长度为1~40字符,支持大小写字母、数字、中划线和下划线 |