如何解决AWS ALB指向同一EC2多端口时8081无法访问问题?
无法访问AWS ALB配置的8081端口&目标组不健康的排查方案
当前配置现状
- ALB监听器:仅配置了80端口转发至TG-prod目标组(对应EC2的8080端口),未针对8081端口的服务配置对应转发规则
- 目标组状态:TG-dev目标组显示不健康,关联的EC2实例未通过健康检查
- EC2安全组:
- 负载均衡器专属访问SG:仅允许ALB访问EC2的8080端口,未开放8081端口的入站权限
- 实例绑定的初始SG:已开放8080、8081端口的入站规则
- PM2运行状态:8080和8081的Node.js服务均显示在线,但两者可能存在启动配置差异(如绑定地址、健康检查接口)
排查&解决步骤
1. 补全ALB监听器配置
- 新增监听器:选择对应协议(HTTP/HTTPS),设置监听端口(可复用80端口按路径转发,或单独用8081端口),将请求转发至TG-dev目标组,并确认目标组的转发端口为8081
- 确保监听器的协议、端口与目标组的配置完全匹配
2. 修复TG-dev目标组健康检查
- 核对健康检查参数:
- 确认健康检查路径是8081服务实际存在的接口(如
/health),且该接口能返回2xx状态码 - 检查健康检查的端口是否设置为8081,协议与服务一致
- 调整健康检查阈值:建议超时时间5秒、间隔10秒、失败阈值2次,避免因阈值过严导致误判
- 确认健康检查路径是8081服务实际存在的接口(如
- 本地验证:登录EC2实例,执行
curl localhost:8081/[健康检查路径],确认服务能正常响应
3. 修正EC2安全组规则
- 编辑负载均衡器专属SG,添加8081端口的入站规则,来源设置为ALB的安全组(或ALB的IP范围)
- 确认EC2实例的安全组组合(初始SG+负载均衡器SG)允许ALB方向的8081端口流量进入
4. 验证Node.js服务的绑定配置
- 检查服务绑定地址:确认8081服务的代码中,监听地址是
0.0.0.0而非localhost(仅绑定localhost的话,ALB无法从外部访问) - 端口监听验证:执行
netstat -tulpn | grep 8081,确认输出显示0.0.0.0:8081或:::8081(表示监听所有网卡) - PM2配置对比:查看8080和8081服务的PM2启动配置(如
pm2 show [服务名]),检查是否存在环境变量、启动命令、端口参数等差异
5. 流量连通性测试
- 用
curl -v [ALB域名]:[监听器端口]/[8081服务路径]测试请求是否能到达服务,查看返回的状态码和响应内容 - 查看ALB访问日志:确认请求是否转发至目标组,以及具体的错误原因(如503对应健康检查失败,404对应路径不存在)
内容的提问来源于stack exchange,提问作者VitoCK
相关产品推荐
相关产品推荐

