我正在研究POC,以证明基于AWS路径的路由通过应用程序负载均衡器到一组非常基本的" hello world" node.js应用程序使用express。如果没有基于路径的路由并且具有多个侦听器,每个应用程序有一个侦听器,则每个相应的侦听器和应用程序都按预期工作。因此,目标群体内的目标均已通过健康检查,并显示为健康。但是,当我在其中一个侦听器上切换到基于路径的路由实现时(删除另一个不必要的侦听器),我得到两个应用程序的以下错误:
不能GET / expressapp
不能GET / expressapp2
我已经阅读了以下文档以试图找出问题所在: http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#path-conditions
我错过了什么?任何疑难解答的想法?
答案 0 :(得分:1)
我相信您会收到此错误,因为相关服务不希望接收前缀为/expressapp
和/expressapp2
的路径。当ALB将流量转发到您的服务时,路径保持不变。
ALB无法处理去除前缀的问题。如果您无权访问应用程序的源代码,则在将其发送到应用程序之前,需要使用某种反向代理(如nginx)重写网址。
如果您有权访问源代码,则express支持changing the base url without modifying the code。您可以将url前缀的值作为环境变量读取,并相应地配置各自的服务环境。
答案 1 :(得分:0)
我将从各自的位置翻转这两个规则,即使expressapp2规则#1和express app规则#2使其按您希望的方式工作。
ALB按优先级顺序评估这些规则,即使上下文路径为expressapp2,它仍与expressapp匹配,并评估第一个规则。