更新时间:2025-08-30 GMT+08:00
分享

高级转发策略概述

当您使用弹性负载均衡负载七层业务时,基于不同的客户端请求会有不同的流量分发处理需求。弹性负载均衡支持配置高级转发策略,支持您根据客户端请求的特征来更精细地控制流量分发。

高级转发策略简介

高级转发策略支持多样化的转发规则和转发动作,便于灵活地分流业务,合理地分配资源。

高级转发策略的实现分为以下四个步骤:

  1. 客户端发送请求至ELB。
  2. 每个客户端请求根据转发策略进行匹配,匹配到多条转发策略时基于转发策略的优先级顺序进行转发。
  3. ELB根据匹配上的转发策略的转发动作,将客户端请求转发至对应的后端服务器进行处理。
  4. 最后返回响应至客户端。
图1 高级转发策略(独享型)示意图
表1 高级转发策略支持的转发规则与动作

转发策略设置

描述

转发规则

域名、路径、HTTP请求方法、HTTP请求头、查询字符串、网段、Cookie。

详见转发规则

转发动作

转发至后端服务器组、重定向至监听器、重定向至URL、返回固定响应、写入Header、删除Header、重写、限速、跨域、流量镜像至后端服务器组。

  • 转发动作设置为“转发至后端服务器组”时,支持额外添加转发动作:重写/写入Header/删除Header/限速/跨域/流量镜像至后端服务器组。
  • 转发动作设置为“返回固定响应”时,支持额外添加转发动作:限速。

详见转发动作

支持设置Cookie类型的转发条件、支持额外设置转发动作重写/写入Header/删除Header/限速/跨域/流量镜像至后端服务器组功能陆续上线中,已发布区域请以控制台实际开放为准。如果您有使用需求,可以提交工单进行处理。

匹配原理

  • 匹配策略:每个客户端请求会按照转发策略进行匹配,一旦能够匹配到一条转发策略,立即按照当前转发策略进行转发。如果匹配到多条转发策略,基于转发策略优先级顺序进行转发(转发策略编号的数值越小,优先级越高,越先匹配)。
    • 一条转发策略的转发规则中添加了多个条件时,请求需同时满足所有条件,才能匹配到该条转发策略。
    • 如果请求能匹配到监听器中您配置的转发策略,则按该转发策略转发请求。
    • 如果请求不能匹配到监听器中您配置的转发策略,则将请求按照默认转发策略进行转发。
  • 转发策略优先级决定客户端请求匹配转发规则顺序的机制。当一个客户端请求满足多条转发策略的转发规则时,转发策略编号的数值越小、优先级越高、越先匹配。
  • 默认转发策略:每个七层协议的监听器创建后,都会有一条默认的转发策略将请求转发到监听器默认的后端服务器组(即创建监听器时配置的后端服务器组)。
    • 如果客户端请求没有匹配到您配置的转发策略,将按照默认转发策略进行转发。
    • 默认转发策略的优先级最低且不参与转发策略排序。可以修改默认的后端服务器组,但不可删除默认转发策略。

转发规则

高级转发策略支持的转发规则类型有:域名、路径、HTTP请求方法、HTTP请求头、查询字符串、网段、Cookie。

表2 高级转发策略的转发规则

转发规则

描述

域名

  • 匹配说明

    触发转发的域名,可以并列添加多个域名。域名由以点分隔的字符串组成,单个字符串不超过63个字符,域名总长度不能超过100个字符。

  • 匹配方式
    • 精确匹配及通配符匹配:只能由英文字母、数字和特殊字符.-?=~_+\^*!$&|()[]组成,支持星号(*)和半角问号(?)作为通配符使用。不支持以.开头和结尾,不支持..的形式。
    • 正则匹配:只能由英文字母、数字和特殊字符.-?=~_+\^*!$&|()[]组成。
域名示例:
请求链接为:https://www.example.com/login.php?locale=zh-cn#videos
转发规则选择“域名”时,填写:www.example.com

路径

  • 匹配说明

    触发转发的路径,可以并列添加多个路径。路径由英文字母、数字和特殊字符_~';@^-%#$.*+?,=!:|\/()[]{}组成,长度范围为1~128个字符。

  • 匹配方式
    • 精确匹配:请求的路径和设定路径完全一致,只能由/开头。
    • 前缀匹配:请求的路径匹配已设定路径的开头,只能由/开头。
    • 正则匹配:请求的路径和设定的路径正则表达式匹配。

更多关于路径匹配转发规则的信息,请参见路径高级转发策略匹配示例

路径示例:
请求链接为:https://www.example.com/login.php?locale=zh-cn#videos
转发规则选择“路径”时,填写:/login.php

查询字符串

当请求中的字符串与设置好的转发策略中的字符串相匹配时,触发转发。

查询字符串是键值对的形式,需要分别设置值:
  • 键(key):只能包含英文字母、数字和特殊字符!$'()*+,./:;=?@^-_'。
  • 值(value):一个键下可以配置多个值。只能包含英文字母、数字和特殊字符!$'()*+,./:;=?@^-_'。支持*和?作为通配符使用。
查询字符串示例:
请求链接为:https://www.example.com/login.php?locale=zh-cn#videos
转发规则需配置“查询字符串”:
键(key):locale
值(value):zh-cn

HTTP请求方法

触发转发的HTTP请求方法。

  • 可以并列设置多个请求方法。
  • 主要分为以下几种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS
HTTP请求方法示例:
GET

HTTP请求头

触发转发的HTTP请求头。

请求头是键值对的形式,需要分别设置值:
  • 键(key):只能由英文字母、数字、下划线和中划线组成。
    说明:

    HTTP请求头User-agent和Connection仅支持首字母大写的形式。

  • 值(value):一个键下可以配置多个值。只能包含英文字母、数字和特殊字符!#$%&'()*+,.\/:;<=>?@[]^-_'{|}~。支持*和?作为通配符使用。
HTTP请求头示例:
键(key):Accept-Language
值(value):zh-CN

网段

触发转发的请求网段。

网段示例:
192.168.1.0/24或2020:50::44/127

Cookie

触发转发的Cookie。

Cookie是键值对的形式,需要分别设置值:

  • 键(key):键的长度为1~100个字符,且首尾字符不能为空格。
  • 值(value):一个键下配置一个值,值的长度为1~100个字符。

支持输入多个Cookie键值对,键值对支持英文字母、数字和特殊字符!%'"()*+,./:=?@^-_`~。

Cookie示例:
键(key):cookie_name
值(value):cookie_value

转发动作

高级转发策略支持的转发动作类型有:转发至后端服务器组、重定向至监听器、重定向至URL、返回固定响应。

转发动作设置为“转发至后端服务器组”和“返回固定响应”时,支持额外添加转发动作。ELB将首先执行额外的转发动作,然后再将请求转发至对应的后端服务器组或返回固定响应。额外转发动作中,限速的优先级最高。

支持额外添加的转发动作如下:

  • 转发至后端服务器组:重写/写入Header/删除Header/限速/跨域/流量镜像至后端服务器组。
  • 返回固定响应:限速。
表3 高级转发策略的转发动作

转发动作

描述

转发至后端服务器组

如果满足转发规则的条件,则将请求转发至配置好的后端服务器组。

您可以添加多个后端服务器组,且必须为每个后端服务器组配置权重,请求将根据配置的权重值转发至不同的后端服务器组。支持配置的权重值为0~100的整数。

支持开启后端服务器组间会话保持并设置会话保持超时时间。

  • 一条转发策略最多支持添加5个后端服务器组。
  • 会话保持超时时间的取值范围为1~1440分钟。
说明:
  • 支持添加多个后端服务器组并配置权重和后端服务器组间会话保持功能陆续上线中,已发布区域请以控制台实际开放为准。
  • 为保证后端服务器组内会话保持生效,请开启后端服务器组间会话保持。
  • 弹性负载均衡严格按照为后端服务器组配置的权重转发请求至后端服务器组,以下情况会造成业务风险。
    • 后端服务器组内的后端服务器健康检查结果全部异常。
    • 后端服务器组内未添加后端服务器。
说明:

转发动作设置为“转发至后端服务器组”时,支持额外添加转发动作:重写/写入Header/删除Header/限速。

详情见添加转发动作(可选)

重定向至监听器

如果满足转发规则的条件,则将请求转发至配置好的监听器上。

说明:

设置“重定向至监听器”的转发策略后,优先级低于该策略的转发策略会失效。

例如:配置了重定向至监听器后,当客户端通过HTTP请求访问的时候,后端服务器会返回HTTPS的响应,即强制以HTTPS请求访问网页。因此实际以HTTPS监听器的配置为准,向后端服务器进行转发,原有HTTP监听器的配置失效。

重定向至URL

如果满足转发规则的条件,则将请求重定向至配置好的URL。

客户端访问ELB网址A后,ELB返回302或者其他3xx返回码和目的网址B,客户端自动跳转到网址B,网址B可自定义。

需要设置如下参数,其中协议、域名、端口和路径至少设置一条。
  • 协议:可以选择“${protocol}”或“HTTP”或“HTTPS”。${protocol}表示与源协议相同。
  • 域名:至少包含两个字符串,字符串间以点分隔,字符串只能由英文字母、数字、中划线和小数点组成。字符串必须以英文字母或数字开头,不能以中划线结尾。${host}表示与源域名相同。
  • 端口:取值范围是1~65535。${port}表示与源端口相同。
  • 路径:由英文字母、数字和特殊字符_~';@^-%#&$.*+?,=!:|\/()[]{}组成,只能由/开头。${path}表示与源路径相同。
    说明:

    转发规则选择路径的正则匹配后,转发动作“重定向至URL”和“重写”中的路径支持正则表达式替换。路径替换规则详情见转发动作的路径支持URL的正则表达式示例

  • 查询字符串:只能包含英文字母、数字和特殊字符!$'()*+,./:;=?@&^-_',&仅支持作为分隔符使用。
  • 返回码:可以选择“301”、“302”、“303”、“307”、“308”。
重定向至URL示例
重定向的链接为:http://www.example1.com/index.html?locale=zh-cn#videos
协议:HTTP
域名:www.example1.com
端口:8081
路径:/index.html
查询字符串:locale=zh-cn
返回码:301

返回固定响应

如果满足转发规则的条件,则返回固定响应。

用户访问ELB实例后,ELB直接返回响应,不向后端服务器继续转发,返回响应的状态码和内容可以自定义。

需要设置如下参数:
  • 返回码:默认支持2XX、4XX、5XX系列状态码。
  • Content-Type:可以选择“text/plain”、“text/css”、“text/html”、“application/javascript”、“application/json”。
  • 响应正文:非必填项,取值范围是0~1024个字符。
说明:

转发动作设置为“返回固定响应”时,支持额外添加转发动作:限速。

详情见添加转发动作(可选)

响应正文示例

text/plain

很抱歉,暂不支持该语言.

text/css

<head><style type="text/css">div {background-color:red}#div {font-size:15px;color:red}</style></head>

text/html

<form action="/" method="post" enctype="multipart/form-data"><input type="text" name="description" value="some text"><input type="file" name="myFile"><button type="submit">Submit</button></form>
说明:

如果您需要显示中文,建议加入<meta charset="utf-8">指定编码,否则浏览器会将中文解析成乱码。

application/javascript

String.prototype.trim = function() {var reExtraSpace = /^\s*(.*?)\s+$/;return this.replace(reExtraSpace, "$1")}

application/json

{ "publicip": { "type": "5_bgp","ip_version": 4},"bandwidth": {"name": "bandwidth123","size": 10,"share_type": "PER"}}
说明:

填写响应正文时,请不要有回车格式,否则无法保存。

表4 添加转发动作(可选)

转发动作

描述

重写

如果满足转发规则的条件,则将请求重写为配置好的URL后再访问后端服务器组。

需要设置如下参数:
  • 域名:至少包含两个字符串,字符串间以点分隔,字符串只能由英文字母、数字、中划线和小数点组成。字符串必须以英文字母或数字开头,不能以中划线结尾。${host}表示与源域名相同。
  • 路径:由英文字母、数字和特殊字符_~';@^-%#&$.*+?,=!:|\/()[]{}组成,只能由/开头。${path}表示与源路径相同。
    说明:

    转发规则选择路径的正则匹配后,转发动作“重定向至URL”和“重写”中的路径支持正则表达式替换。路径替换规则详情见转发动作的路径支持URL的正则表达式示例

  • 查询字符串:只能包含英文字母、数字和特殊字符!$'()*+,./:;=?@&^-_',&仅支持作为分隔符使用。
说明:

重写类型的转发动作中域名、路径和查询字符串不能全部为空或者默认值。

写入Header

如果满足转发规则的条件,则将在请求中写入配置的Header后再访问后端服务器组。

输入头字段名称和头字段内容,将覆盖请求中的头变量。默认支持配置5个Header变量。

Header是键值对的形式,需要分别设置值:
  • 键(key):键的长度为1~40个字符,只能由英文字母、数字、下划线和中划线组成。
  • 值(value):一个键下可以配置多个值。值的长度为1~128个字符,只能包含英文字母、数字和特殊字符!#$%&'()*+,.\/:;<=>?@[]^-_'{|}~。还支持*和?两种通配符。
    • 用户指定:用户指定写入的Header键。

      只能包含英文字母、数字和特殊字符!#$%&'"()*+,.\\/:;<=>?@[]^-_` {|}~。首尾字符不能为空格。

    • 系统定义:支持写入以下指定的Header键。

      客户端端口/客户端IP地址/客户端请求协议/负载均衡实例ID/负载均衡实例监听端口/负载均衡绑定的弹性公网IP/负载均衡绑定的私网IP。

    • 引用:引用请求头字段中的某一个Header键值。

      只能由小写英文字母、数字、下划线和中划线组成。

写入Header示例参见表5

删除Header

如果满足转发规则的条件,则将在请求中删除配置的Header后再访问后端服务器组。

输入Header头字段名称,将删除请求Header中对应的键值对内容。默认支持配置5个Header变量。

键(key):只能由英文字母、数字、下划线和中划线组成。

限速

转发动作转发至后端服务器组和返回固定响应支持设置限速。

请根据需要配置以下参数

  • QPS(总限速):每秒查询速率,支持取值范围:1~100000。请求速率超过设置的限速后,新建连接请求将被丢弃,并会返回给客户端503状态码。
  • QPS(基于客户端源IP限速):基于客户端源IP进行限速,取值范围:1~100000。同时配置QPS(总限速)和QPS(基于客户端源IP限速)时,基于客户端源IP限速值要小于总限速值。请求速率超过设置的限速后,新建连接请求将被丢弃,并会返回给客户端503状态码。
    说明:

    QUIC协议的监听器不支持设置基于客户端源IP限速。

跨域

如果满足转发规则的条件,则ELB支持跨域请求,可以添加跨域资源共享CORS(Cross-Origin Resource Sharing)标头以允许浏览器跨域访问 Web应用程序。

跨域:在Web开发中,出于安全原因,浏览器实施的同源策略限制了从一个源加载的网页脚本访问来自不同源的资源。如果客户端发送的请求URL的协议、域名或者端口三者之间任意一个与当前返回的页面URL不同即为跨域。
  • 允许的访问来源:设置允许通过浏览器访问服务器资源的路径。

    单个值必须以http://或者https://开头,后边加一个正确的域名或一级泛域名,单个值可以不加端口,也可以指定端口,端口范围:1~65535。最多设置32个值,请以英文逗号分隔,也支持设置通配符“*”。

  • 允许的方法:选择跨域访问时允许的HTTP方法。

    支持的方法包括:GET,POST、PUT、DELETE、HEAD、OPTIONS、PATCH。

  • 允许的请求头部:设置允许的跨域资源共享请求标头。

    单个值只允许包含大小写字母、数字,_和-,且不能以下划线(_)和短划线(-)开头或结尾,最长32个字符。最多设置32个值,请以英文逗号分隔。

  • 允许的响应头部:设置允许浏览器、JavaScript脚本访问的响应标头。

    单个值只允许包含大小写字母、数字,_和-,且不能以下划线(_)和短划线(-)开头或结尾,最长32个字符。最多设置32个值,请以英文逗号分隔。

  • 携带凭证:跨域访问时是否允许携带凭证信息。

    取值:允许或不允许,默认允许。

  • 浏览器缓存时间:对于预检请求,设置OPTIONS预检请求在浏览器的最大缓存时间。

    取值范围:-1~172800,单位:秒。

流量镜像至后端服务器组

将转发至后端服务器组的流量请求镜像到选择的后端服务器组,适用于网络流量检查、审计分析以及问题定位等场景。

添加的其他可选转发动作也会对镜像到后端服务器组中的流量请求生效。

表5 写入Header示例

原有请求头

写入Header键

写入Header键值

转发至后端服务器组请求头

header1:aaa

header2:bbb

header3

自定义

ccc

header1:aaa

header2:bbb

header3:ccc

header3

系统指定

客户端端口

header1:aaa

header2:bbb

header3:客户端端口

header3

引用

header1

header1:aaa

header2:bbb

header3:aaa

不支持对请求中的以下Header键值进行修改(不区分大小写):

connection、upgrade、content-length、transfer-encoding、keep-alive、te、host、cookie、remoteip、authority、x-forwarded-host、x-forwarded-for、x-forwarded-for-port、x-forwarded-tls-certificate-id、x-forwarded-tls-protocol、x-forwarded-tls-cipher、x-forwarded-elb-ip、x-forwarded-port、x-forwarded-elb-id、x-forwarded-elb-vip、x-real-ip、x-forwarded-proto、x-nuwa-trace-ne-in、x-nuwa-trace-ne-out。

路径高级转发策略匹配示例

配置了5个基于路径的高级转发策略,如表6所示。

表6 路径高级转发策略匹配示例

请求路径

转发策略

设定的路径

匹配模式

转发策略优先级

转发至后端服务器组

/elb/abc.html

转发策略01

/elb/abc.html

前缀匹配

优先级 1

后端服务器组01

转发策略02

/elb

前缀匹配

优先级 2

后端服务器组02

/exa/index.html

转发策略03

/exa[^\s]*

正则匹配

优先级 3

后端服务器组03

转发策略04

/exa/index.html

正则匹配

优先级 4

后端服务器组04

/mpl/index.html

转发策略05

/mpl/index.html

精确匹配

优先级 5

后端服务器组05

转发情况如下:

  • 当请求路径为“/elb/abc.html”时,初步可以匹配到两个前缀匹配转发策略01转发策略02,但由于转发策略01的优先级高于转发策略02的优先级(优先级 2 < 优先级 1),因此最终匹配到转发策略01,将请求转发至后端服务器组01
  • 当请求路径为“/exa/index.html”时,初步可以匹配到两个正则匹配转发策略03转发策略04,但由于转发策略03的优先级高于转发策略04的优先级(优先级 4 < 优先级 3),因此最终匹配到转发策略03,将请求转发至后端服务器组03
  • 当请求路径为“/mpl/index.html”时,可以通过精确匹配,匹配到转发策略05,将请求转发至后端服务器组05

转发动作的路径正则表达式示例

转发动作“重定向至URL”和“重写”中的路径由英文字母、数字和特殊字符_~';@^-%#&$.*+?,=!:|\/()[]{}组成,只能由/开头。${path}表示与源路径相同。

转发规则选择路径的正则匹配后,转发动作的路径支持正则表达式替换。

路径替换流程

  1. 路径匹配:客户端发送请求,并匹配到某一条路径转发规则的正则表达式。路径中支持写入一个或多个正则表达式,支持写入多个()。
  2. 路径按照正则表达式的规范提取替换变量:转发动作中的路径通过$1来获取( )中的变量,最多可以获取九个变量至$9。
  3. 自由组合出目标路径:获取的变量对路径设置中的$1进行替换,最终拼接成重写或重定向的实际路径。

路径替换示例

当客户端发送请求的路径为/test/ELB/elb/index时,匹配转发规则的转发条件/test/(.*)/(.*)/index,经转发路径/$1/$2提取变量后,最终后端服务器接收到的请求路径为/ELB/elb。

表7 路径支持URL的正则表达式替换示例

匹配动作

说明

转发规则:路径

正则匹配

  • 路径正则匹配条件:/test/(.*)/(.*)/index
  • 匹配成功的请求路径:/test/ELB/elb/index

转发动作:重写或重定向至URL

路径

  • 路径替换条件:/$1/$2
  • 提取替换变量

    $1:提取出ELB

    $2:提取出elb

  • 目标路径:/ELB/elb

相关文档