AWS应用负载均衡器主机名路由规则配置异常排查
问题根因
ALB的规则评估逻辑是按优先级数值从小到大依次匹配,命中第一条符合条件的规则后直接终止后续评估,你遇到的两个异常场景,本质是规则优先级排序错误、匹配条件未做逻辑组合、通配符使用不当三个问题导致的,和ALB本身的主机路由能力无关:
- 精确域名匹配场景下合法域名也返回404:要么是你把返回404的拦截规则优先级设得比合法域名的转发规则高,合法请求先命中了拦截规则;要么是配置精确域名匹配的转发规则时,没有和原有的路径匹配条件做AND组合,规则命中后没有可转发的目标,直接落到了默认兜底规则;还有一种常见低级错误是主机头值填错,带了协议、端口或者路径,比如填成
https://app.domain-name.com,和实际请求里不带额外字段的Host头完全不匹配。 - 泛域名
*.domain-name.com匹配场景下未授权域名被放行:ALB的*.domain-name.com通配规则会匹配所有以.domain-name.com结尾的单级子域名请求,你用来测试的未授权域名test.domain-name.com本身就符合这个通配规则,自然会被正常放行,完全起不到白名单过滤的作用。
正确配置步骤
按以下顺序调整规则即可实现预期的域名白名单+路径路由+未授权请求返回404的效果,规则优先级数字越小、匹配顺序越靠前:
- 最高优先级(建议设为1):配置拦截规则,匹配条件选「主机头」,匹配类型选「不属于以下列表」,把你所有要放行的白名单域名精确填入列表,不要用通配符;规则动作选「返回固定响应」,HTTP状态码填404。所有不在白名单的域名请求会第一时间命中这条规则返回404,不会进入后续路由逻辑。
- 次高优先级(从10开始依次给不同路由规则分配优先级即可):修改原有正常运行的路径路由规则,给每条规则额外增加一个主机头匹配条件,精确匹配该路径对应的合法白名单域名——同一规则内的多个条件默认是AND逻辑,必须同时满足「域名在白名单内」+「路径符合规则要求」两个条件,才会转发到对应的目标组。
- 最低优先级(ALB默认规则,系统固定为最后评估):将默认规则的动作也修改为返回404,兜底所有漏匹配的异常请求。
配置避坑提醒
- 白名单匹配场景不要使用
*.domain-name.com这类泛通配规则,除非你明确需要放行所有同级子域名,否则必然出现未授权域名被放通的问题。 - 填写主机头匹配值时,只填纯域名,不要带
http:///https://协议头、端口号、请求路径,否则永远无法匹配正常请求。 - 规则配置完成后等待15-30秒再测试,ALB的规则同步到所有接入节点需要一定时间,刚配置完立刻测试可能命中旧配置返回异常结果。
- 测试时不要直接用ALB自带的
*.elb.amazonaws.com域名访问,该域名不在你的白名单内,返回404是预期行为;用Postman测试时关闭自动重写Host头的配置,确保请求携带的Host头和测试场景一致。
内容的提问来源于stack exchange,提问作者JulienChamp
相关产品推荐
相关产品推荐

