AWS应用负载均衡器(ALB)路径路由配置失效求助
解决AWS ALB路径路由规则不生效的问题
我之前也碰到过类似的ALB路由失效情况,结合你的描述,咱们一步步拆解问题:
核心排查与解决方向
1. 修正路径匹配规则的覆盖范围
ALB的路径匹配是前缀匹配,你配置的/api/*只能命中/api/xxx这类带后续子路径的请求,但如果用户直接访问licence.example.com/api(不带末尾斜杠),这条规则是不会触发的!
建议你把规则1的路径条件调整为以下两种方式之一:
- 添加两个路径条件:
/api和/api/*,覆盖根路径和子路径两种请求场景 - 直接使用
/api*,这个匹配符会自动覆盖/api、/api/、/api/xxx所有以/api开头的路径
2. 再次确认规则优先级与匹配逻辑
虽然你说交换过规则顺序,但要牢记:ALB是从上到下匹配规则,命中第一条就停止执行后续规则。所以必须保证licence.example.com + /api*的规则排在licence.example.com的规则前面。
另外要检查主机头条件是不是精确匹配(选择「主机头等于」而非「包含」),避免因为匹配范围过宽导致的逻辑混乱。
3. 查看ALB访问日志(最关键的排查手段)
ALB的访问日志会记录每个请求匹配的规则ID,这能直接定位问题根源:
- 登录AWS控制台,找到你的ALB,进入「监控」->「访问日志」,确认日志已开启并存储到S3或CloudWatch
- 查看日志中的
rule-id字段,对比你两条规则的ID,看看licence.example.com/api的请求到底匹配了哪条规则 - 同时检查日志里的
host和path字段,确认请求的实际路径和主机头是否符合预期(比如有没有URL编码、额外斜杠等异常)
4. 验证目标组B的健康状态
如果目标组B的所有实例都处于不健康状态,ALB会自动跳过这条规则,将请求路由到下一条匹配的规则(也就是目标组A)。你可以在目标组的「监控」页面查看健康检查状态,确保至少有一个实例处于健康可用状态。
快速验证步骤
- 把规则1的路径改成
/api*,并放在规则2的上方 - 发送测试请求:
curl -H "Host: licence.example.com" https://<你的ALB域名>/api curl -H "Host: licence.example.com" https://<你的ALB域名>/api/test - 查看ALB日志,确认这两个请求都匹配规则1并路由到目标组B
- 同时测试根路径请求,确认匹配规则2并路由到目标组A
内容的提问来源于stack exchange,提问作者hookenz
相关产品推荐
相关产品推荐

