Amazon web services AWS应用程序负载平衡器(ALB)基于路径的路由未按预期运行

Amazon web services AWS应用程序负载平衡器(ALB)基于路径的路由未按预期运行,amazon-web-services,amazon-ec2,amazon-elb,Amazon Web Services,Amazon Ec2,Amazon Elb,我正在使用一个POC来证明AWS基于路径的路由,通过一个应用程序负载平衡器,使用express到一组非常基本的“hello world”node.js应用程序。如果没有基于路径的路由,并且有多个侦听器,每个应用程序有一个侦听器,那么每个侦听器和应用程序都会按预期工作。因此,目标群体中的目标都通过了健康检查,并显示为健康。但是,当我在一个侦听器上切换到基于路径的路由实现时(删除另一个不必要的侦听器),两个应用程序都会出现以下错误: 无法获取/expressapp 无法获取/expressapp2

我正在使用一个POC来证明AWS基于路径的路由,通过一个应用程序负载平衡器,使用express到一组非常基本的“hello world”node.js应用程序。如果没有基于路径的路由,并且有多个侦听器,每个应用程序有一个侦听器,那么每个侦听器和应用程序都会按预期工作。因此,目标群体中的目标都通过了健康检查,并显示为健康。但是,当我在一个侦听器上切换到基于路径的路由实现时(删除另一个不必要的侦听器),两个应用程序都会出现以下错误:

无法获取/expressapp
无法获取/expressapp2

我查阅了以下文档,试图找出问题所在:


我错过了什么?有什么疑难解答的想法吗?

我会将这两条规则从各自的位置翻转过来,即创建expressapp2规则1和expressapp2规则2,使其能够像您希望的那样工作


ALB按优先级顺序评估这些规则,即使上下文路径是expressapp2,它仍与expressapp匹配,并评估第一条规则。

我相信您会遇到此错误,因为相关服务不希望接收前缀为
/expressapp
/expressapp2
的路径。当ALB将流量转发到您的服务时,路径保持不变

删除前缀不能由ALB处理。如果您无法访问应用程序的源代码,则需要使用某种反向代理(如nginx)在将URL发送到应用程序之前重写URL


如果您有权访问源代码,请访问express supports。您可以在中读取url前缀的值作为环境变量,并相应地配置您各自的服务环境。

我刚刚注意到底部有一点:请注意,路径模式用于路由请求,但不会改变它们。例如,如果规则的路径模式为/img/*,则该规则会将对/img/picture.jpg的请求作为对/img/picture.jpg的请求转发给指定的目标组。“路径转发是个问题,因为我试图使用路径将请求发送到备用端口,但我希望在其中一种情况下剥离路径,而不是在另一种情况下剥离路径。有人知道怎么做吗?我不知道怎么做;但是我很乐意。我现在也遇到了同样的问题。试图将
/jenkins*
转发到jenkins容器的登录页,将
/grafana*
转发到grafana登录页,等等。但是,每个带有扩展名的请求都会被默认设置为失败,然后通常会失败或返回404。基于端口的侦听器工作正常。关于如何处理此问题的想法?@Budris先生是否解决此问题?这里的404状态相同=/谢谢。@Diegorges yep——在conatiner上运行NGINX;)但实际上,它更适合于提供这类服务,因为它提供了健壮的路由和url重写。