转发规则配置示例与域名路径匹配规则
本文提供ALB转发规则的常见场景配置示例,并介绍域名和路径的匹配规则、重写与重定向的路径增强配置规则。
常见场景配置示例
场景一:HTTP强制跳转HTTPS
将用户的HTTP请求自动跳转到HTTPS,确保数据传输加密。需要为HTTP监听(端口80)添加一条转发规则。
|
参数 |
说明 |
|
转发条件 |
选择路径:精确匹配及通配符并输入 |
|
转发动作 |
选择重定向至。
|
效果:用户访问http://www.example.com/page时,浏览器自动跳转到https://www.example.com/page。
该规则需要配置在HTTP监听(端口80)上。同时,请确保已创建HTTPS监听(端口443)并关联了有效的SSL证书。完整的前提条件和操作步骤,请参见使用ALB将HTTP访问重定向至HTTPS。
场景二:同域名按路径分流到不同后端
同一个域名下,将不同路径的请求转发到不同的服务器组。例如将API请求和静态资源请求分别转发到不同的后端。
规则1:将/api/*的请求转发到API服务器组。
|
参数 |
说明 |
|
转发条件 |
选择路径:精确匹配及通配符并输入 |
|
转发动作 |
选择转发至,然后选择API服务器组。 |
规则2:将/static/*的请求转发到静态资源服务器组。
|
参数 |
说明 |
|
转发条件 |
选择路径:精确匹配及通配符并输入 |
|
转发动作 |
选择转发至,然后选择静态资源服务器组。 |
ALB按转发规则的编号顺序逐条匹配。请将更具体的路径规则排在前面(编号更小),避免被通配符规则优先匹配。例如,/api/v2/*应排在/api/*之前。
场景三:多域名转发到不同后端
在同一个ALB实例上托管多个域名,将不同域名的请求转发到各自的后端服务器组。
规则1:将www.example.com的请求转发到Web服务器组。
|
参数 |
说明 |
|
转发条件 |
选择域名:精确匹配及通配符并输入 |
|
转发动作 |
选择转发至,然后选择Web服务器组。 |
规则2:将api.example.com的请求转发到API服务器组。
|
参数 |
说明 |
|
转发条件 |
选择域名:精确匹配及通配符并输入 |
|
转发动作 |
选择转发至,然后选择API服务器组。 |
场景四:去除路径前缀后转发
将请求路径中的特定前缀去除后转发到后端,同时支持匹配前缀后的多层路径。例如,ALB转发www.example.com/api/aaa/bbb/...的访问请求时,需要在路径中去除/api部分,同时支持匹配/api后的多层路径。
重写在ALB内部完成路径替换,客户端浏览器地址栏不变;重定向会向客户端返回一个新的URL,浏览器地址栏会更新为新地址。如果仅需后端收到去除前缀后的路径,使用重写;如果需要客户端感知到URL变化,使用重定向。
重写
|
参数 |
说明 |
|
|
转发条件 |
域名 |
精确匹配及通配符并输入 |
|
路径 |
正则匹配|不区分大小写并输入 |
|
|
转发动作 |
重写 |
|
|
转发至 |
选择目标服务器组。 |
|
重定向
|
参数 |
说明 |
|
|
转发条件 |
域名 |
精确匹配及通配符并输入 |
|
路径 |
正则匹配|不区分大小写并输入 |
|
|
转发动作 |
重定向至 |
|
效果:用户访问www.example.com/api/aaa/bbb/...时,后端服务器收到的请求路径为/aaa/bbb/...。
场景五:裸域名跳转到www子域名
将裸域名(如example.com)的访问跳转到www.example.com,统一入口便于SEO和管理。
|
参数 |
说明 |
|
转发条件 |
选择域名:精确匹配及通配符并输入 |
|
转发动作 |
选择重定向至。
|
效果:用户访问example.com时,浏览器自动跳转到www.example.com,协议和端口保持不变。
如果还需要同时将HTTP跳转到HTTPS,请配合场景一使用。
场景六:通配符域名匹配
使用通配符域名统一匹配所有子域名,将请求转发到同一个服务器组。
|
参数 |
说明 |
|
转发条件 |
选择域名:精确匹配及通配符并输入 |
|
转发动作 |
选择转发至,然后选择目标服务器组。 |
效果:a.example.com、b.example.com、tenant1.example.com等所有子域名的请求都会转发到同一个服务器组。
如果需要某个特定子域名转发到不同的服务器组,请将该精准域名规则的编号设置在通配符规则之前。ALB不会自动按域名精确程度排序,而是按规则编号顺序匹配。
场景七:基于HTTP标头灰度发布
通过HTTP标头实现灰度发布,将带有特定标头的请求转发到新版本服务器组,其他请求仍然转发到旧版本。
规则1(灰度规则,编号靠前):将携带X-Canary: true的请求转发到新版本服务器组。
|
参数 |
说明 |
|
转发条件 |
选择HTTP标头,键设置为 |
|
转发动作 |
选择转发至,然后选择新版本服务器组。 |
规则2(默认规则,编号靠后):不携带该标头的请求继续转发到旧版本服务器组。可通过监听的默认转发规则实现。
效果:客户端请求携带X-Canary: true标头时,流量转发到新版本服务器组;未携带该标头的请求仍转发到旧版本服务器组。
灰度规则的编号必须小于默认规则,确保灰度流量被优先匹配。关于基于Cookie和服务器组权重的灰度方式,请参见使用ALB实现灰度发布。
转发条件的域名配置规则
ALB按转发规则编号的优先级顺序逐条匹配,命中即停,不会自动按域名的精确程度排序。此机制与CLB中"精确匹配 > 小范围通配 > 大范围通配"的自动排序不同。
例如,同一监听下有以下两条规则:
|
规则编号 |
转发条件 |
|
规则1(编号1) |
域名 = |
|
规则2(编号2) |
域名 = |
此时访问www.example.com将匹配规则1(通配符),而非规则2(精准域名),因为规则1编号更小。
正确做法:将精准域名规则的编号设置在通配符规则之前(即调换为规则1 =www.example.com,规则2 =*.example.com)。
|
域名配置规则 |
说明 |
|
精准匹配及通配符 |
|
|
正则匹配 |
|
转发条件的路径配置规则
ALB的路径匹配规则与Nginx不同,ALB不支持路径最长匹配原则。例如,Nginx的常用配置为location /api,匹配location的方式为最长前缀匹配,ALB的最长前缀匹配需通过通配符实现。用户可以在ALB上配置/api/*(精准匹配及通配符)来达到相同的效果。
如果同一监听下有/api/*和/api/v2/*两条规则,必须将/api/v2/*的规则编号设置在/api/*之前,否则所有请求都会被/api/*优先匹配。
|
路径配置规则 |
说明 |
|
精准匹配及通配符 |
|
|
正则匹配 |
|
重写和重定向中路径的增强配置规则
转发条件的路径配置正则表达式后,转发动作中的重写和重定向的路径支持正则表达式替换。
-
注意事项
-
转发条件中正则表达式中包含的半角圆括号
( )需要与转发动作中重写或重定向路径中$变量的个数保持一致。 -
转发动作中重写或重定向的路径中需要包含
${1}、${2}、${3}中的一个或多个,且这三个变量不支持使用其他字符代替。 -
重写或重定向的路径中,
$仅允许用于引用以下变量:${host}、${path}、${port}、${protocol}以及正则捕获组变量(如${1}、${2}、${3}等),不支持引用其他变量。
-
-
替换原理
-
路径匹配:客户端发送请求,并匹配到某一条路径转发规则的正则表达式。
-
提取与替换:按照正则表达式的规范提取,将前三个半角圆括号
( )提取出来的内容分别保存至${1}、${2}、${3}中,用于在转发动作的重写或重定向路径中替换。 -
拼接:按照转发动作中重写或重定向路径的配置,对其中的
${1}、${2}、${3}进行值的替换,最终拼接成重写或重定向的实际路径。
编号
步骤
示例
1
配置转发规则中的转发条件和转发动作。
-
转发条件路径:
/app/(.*)/(.*)/settings -
转发动作重写或重定向路径:
/${1}/${2}
2
客户端发送请求,并匹配路径。
-
客户端发送的请求路径:
/app/users/profile/settings -
匹配到的转发条件路径:
/app/(.*)/(.*)/settings
3
提取与替换
按照正则表达式规范,转发条件路径中的两个
(.*)分别提取到users和profile,并分别保留至转发动作中重写或重定向路径中的${1}和${2}。-
${1}替换为users -
${2}替换为profile
4
拼接路径
后端服务器接收到的路径:
/users/profile -
-
配置示例
您可以根据注意事项和替换原理,在控制台上添加转发规则。
示例1:转发动作为重写和转发至
以下示例将路径
/app/users/profile/settings重写为/users/profile后转发到后端。其中,正则表达式/app/(.*)/(.*)/settings通过两个捕获组分别提取users和profile,然后在重写路径中使用${1}/${2}拼接成最终路径。配置项
说明
转发条件
路径
选择正则匹配|不区分大小写并输入正则表达式
/app/(.*)/(.*)/settings。例如:客户端请求路径为
/app/users/profile/settings,将匹配该规则,捕获组分别提取users和profile,对应${1}和${2}。转发动作
重写
-
域名:
${host} -
路径:
/${1}/${2} -
查询:
${query}
查询的内容指URL中问号后面的部分。示例:URL为
www.example.com/test/test1?x=1,查询的内容为x=1。转发至
在服务器组列表中选择目标服务器组。
示例2:转发动作为重定向
以下示例将路径
/app/users/profile/settings重定向为/users/profile。与示例1不同的是,重定向会返回301状态码,浏览器地址栏的URL会发生变化。配置项
说明
转发条件
路径
选择正则匹配|不区分大小写并输入正则表达式
/app/(.*)/(.*)/settings。例如:客户端请求路径为
/app/users/profile/settings,将匹配该规则,捕获组分别提取users和profile,对应${1}和${2}。转发动作
重定向至
-
协议:
${protocol} -
域名:
${host} -
端口:
${port} -
路径:
/${1}/${2} -
查询:
${query} -
状态码:
301
-
常见问题
如何仅重写域名而不修改路径?
如果您需要将请求的域名重写为另一个域名,但保持路径和查询字符串不变,可以按照以下方式配置:
-
转发条件:域名设置为原始域名,如
old.example.com。 -
转发动作:重写,域名设置为新域名(如
new.example.com),路径设置为${path}(保持原路径),查询设置为${query}(保持原查询字符串)。同时配置转发至目标服务器组。
如何为路径添加前缀?
如果您需要在原始路径前添加版本号等前缀,例如将/users/list重写为/v2/users/list,可以按照以下方式配置:
-
转发条件:路径正则匹配设置为
^/(.*)。 -
转发动作:重写,路径设置为
/v2/${1}。同时配置转发至目标服务器组。
配置后,请求/users/list将被重写为/v2/users/list后转发至后端服务器。
如何去除路径中的特定前缀?
请参见本文的场景四:去除路径前缀后转发。该场景以/api/*为例,展示了使用正则匹配 + 重写或重定向去除前缀的完整配置。
转发规则匹配不上/路由不对怎么排查?
如果配置了转发规则但请求没有按预期路由,可按以下步骤排查:
-
检查规则编号顺序:ALB按规则编号从小到大逐条匹配,命中即停。如果一条更宽泛的规则编号排在前面,后面更精确的规则将不会被匹配到。
-
检查匹配类型:确认使用了正确的匹配类型(精准匹配、通配符、正则)。例如,精准匹配
/api不会匹配/api/users,需要使用通配符/api/*。 -
检查多条件组合:一条转发规则配置多个转发条件时,不同类型的条件之间为"与"(AND)关系,同一类型条件的多个值之间为"或"(OR)关系。详细说明请参见配置监听转发规则。
-
查看访问日志:通过ALB访问日志的
host和request_uri字段,确认ALB收到的实际请求内容是否与预期一致。
重写和重定向有什么区别?该选哪个?
|
对比项 |
重写(Rewrite) |
重定向(Redirect) |
|
浏览器地址栏 |
不变(用户无感知) |
变化为新URL |
|
处理方式 |
ALB内部修改请求路径后转发到后端,一次请求完成 |
ALB返回3xx状态码,浏览器发起第二次请求访问新URL |
|
适用场景 |
去除路径前缀、添加版本号等内部路径调整 |
HTTP→HTTPS跳转、裸域→www跳转、旧URL迁移 |
|
是否需要配合转发至 |
是,重写必须同时配置"转发至"目标服务器组 |
否,重定向独立生效 |
相关文档
如果您需要为ALB监听配置其他监听转发规则,请参见配置监听转发规则。