本文提供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}中的一个或多个,且这三个变量不支持使用其他字符代替。
替换原理
路径匹配:客户端发送请求,并匹配到某一条路径转发规则的正则表达式。
提取与替换:按照正则表达式的规范提取,将前三个半角圆括号
( )提取出来的内容分别保存至${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监听配置其他监听转发规则,请参见配置监听转发规则。