AWS ALB路径路由配置故障求助:带路径访问转发失败
ALB路径路由失败问题排查与最佳实践
问题描述
在Application Load Balancer(ALB)后方部署3台实例,配置路径路由规则(如访问/ui时转发到5001端口对应的目标组),根路径访问正常,但带路径的地址(如/ui/)访问失败。已验证实例健康状态正常,推测问题出在端点或目标组配置;同时疑问:是否必须在应用中配置/ui或/grafana这类路径?
核心原因
ALB默认会将完整的请求路径(包括/ui/这类前缀)转发给后端应用,但你的后端应用本身没有这些前缀路径,导致返回404错误。不需要在应用中配置对应路径,只需在ALB的转发规则中添加路径重写,剥离前缀后再转发给后端即可。
解决方案:修改ALB路由规则,添加路径重写
在每个aws_lb_listener_rule的action块中,加入path_modification配置,将请求路径中的前缀替换为后端应用能识别的路径(通常是根路径/*)。
修正后的关键代码示例(以App UI规则为例)
resource "aws_lb_listener_rule" "app_ui_rule" { listener_arn = aws_lb_listener.http.arn priority = 100 action { type = "forward" target_group_arn = aws_lb_target_group.app_ui_target_group.arn # 路径重写:将/ui/* 替换为 /*,剥离前缀后转发给后端 path_modification { type = "replace" value = "/*" } } condition { path_pattern { values = ["/ui", "/ui/*"] # 同时匹配/ui和/ui/*两种访问场景 } } }
其他路由规则的统一修正示例(以Grafana为例)
resource "aws_lb_listener_rule" "grafana_rule" { listener_arn = aws_lb_listener.http.arn priority = 160 action { type = "forward" target_group_arn = aws_lb_target_group.grafana_target_group.arn path_modification { type = "replace" value = "/*" } } condition { path_pattern { values = ["/grafana", "/grafana/*"] } } }
所有如/metrics、/mongo-express的路由规则都需添加相同的路径重写配置。
端点配置最佳实践
- 覆盖完整路径场景:路由条件中同时配置
/prefix和/prefix/*,避免用户访问/prefix时匹配不到规则(默认走根路径转发逻辑)。 - 路径重写必对应:每个带前缀的路由规则都要配置路径重写,剥离ALB的路由标识前缀。
- 健康检查保持现状:目标组的健康检查路径维持
/即可,因为后端应用的健康检查端点确实是根路径。 - 优先级合理排序:确保路由规则的
priority数值合理(数值越小优先级越高),避免高优先级规则覆盖低优先级规则。 - 生产环境启用HTTPS:建议配置443端口的HTTPS监听,通过AWS证书管理器配置SSL证书,避免明文传输。
内容的提问来源于stack exchange,提问作者Assaf
相关产品推荐
相关产品推荐

