如何配置反向代理路由至两个ALB,实现单域名多路径分流?
最优实现方案
首先,你之前在K8s里修改手动创建的alb1规则报错是正常的——K8s的AWS Load Balancer Controller只能管理它自己创建的ALB,手动创建的alb1不在它的管控范围内,所以直接通过Ingress配置修改会失败。
下面是两种可行的最优方案,按需选择:
方案一:新增顶层ALB作为统一入口(推荐)
这是最直接且易维护的方案,完全兼容现有两个ALB的部署模式:
- 创建一个全新的ALB(命名为
alb-main),将域名abc.com的DNS解析指向这个ALB。 - 在
alb-main上配置HTTP/HTTPS监听规则,注意规则匹配顺序是从上到下优先匹配,所以按以下顺序配置:- 路径规则:
/newpage(如果需要覆盖子路径,用/newpage/*),转发到alb2对应的目标组。 - 路径规则:
/oldpage(或/oldpage/*),转发到alb1对应的目标组。 - 默认规则(
/*),转发到alb1对应的目标组。
- 路径规则:
- 调整alb1和alb2的安全组,允许
alb-main的流量访问(开放80/443端口),确保目标组的健康检查正常。
方案二:用CloudFront作为统一入口(附带CDN能力)
如果需要CDN缓存优化Next.js静态资源,可以选择这种方案:
- 创建CloudFront分发,将自定义域名设置为
abc.com,并配置对应的SSL证书。 - 添加两个自定义源:分别指向alb1和alb2的公网域名,源端口选择80或443(根据后端ALB的配置)。
- 在CloudFront的「行为」中配置路径规则,同样按优先级排序:
- 路径模式
/newpage/*,关联alb2的源,缓存策略根据Next.js的需求调整(比如静态资源缓存长期,动态页面不缓存)。 - 路径模式
/oldpage/*和默认路径/*,关联alb1的源。
- 路径模式
- 确保后端ALB的安全组允许CloudFront的IP段访问,或者直接开放公网访问(如果用CloudFront的源保护功能,可以更安全)。
关键注意事项
- 所有路径规则的匹配顺序必须严格遵循「具体路径在前,通用路径在后」,否则
/*会优先匹配所有请求,导致/newpage无法转发到alb2。 - 如果使用HTTPS,顶层入口(ALB/CloudFront)需要配置覆盖
abc.com的SSL证书,后端ALB可以使用HTTP或内部证书(只要入口能信任即可)。 - 测试时要覆盖边缘场景:比如
/newpage末尾带/或不带/、/newpage/xxx子路径、/oldpage的各种变体,确保转发符合预期。
内容的提问来源于stack exchange,提问作者Venkat
相关产品推荐
相关产品推荐

