AWS EC2实例SSH连接超时及负载均衡报错求助
问题分析与解决方案
问题概述
按照Django部署到AWS ECS的Terraform教程操作,前期通过EC2 Instance Connect成功连接EC2实例,但部署后出现以下问题:
- 访问负载均衡IP先返回
503 Service Unavailable,修改入站规则源为0.0.0.0/0后变为502 Bad Gateway - SSH连接实例超时:
ssh: connect to host xx port 22: Operation timed out
- Ping实例IP提示
Request timed out
分步排查与解决
1. 优先解决EC2实例网络可达性问题(SSH/Ping超时)
- 检查安全组出站规则:确保EC2实例所在安全组允许出站流量,至少需允许TCP 443(EC2 Instance Connect依赖AWS API通信)、ICMP(Ping测试)的出站请求
- 验证网络ACL规则:
- 入站ACL需开放TCP 22(SSH)、ICMP(Ping)的流量,源可设为
0.0.0.0/0或你的本地IP段 - 出站ACL需允许对应流量的响应包返回(如TCP 22的ACK包、ICMP响应)
- 入站ACL需开放TCP 22(SSH)、ICMP(Ping)的流量,源可设为
- 确认子网路由表配置:检查实例所在子网关联的路由表,是否存在指向Internet Gateway(IGW)的路由,无此路由则实例无法与公网通信
- 检查EC2 Instance Connect服务状态:
- Amazon Linux 2默认预装该服务,其他系统需确认是否已安装
- 待实例恢复连接后,执行
systemctl status ec2-instance-connect确认服务运行正常
2. 排查负载均衡502错误
- 检查目标组健康状态:
- 登录AWS控制台查看负载均衡关联的目标组,确认EC2实例是否处于
健康状态 - 若实例不健康,检查健康检查路径是否正确(比如是否配置了Django的健康检查端点如
/health/),同时确认健康检查的端口、协议与实例上的Django服务一致
- 登录AWS控制台查看负载均衡关联的目标组,确认EC2实例是否处于
- 验证Django服务运行状态:
- SSH连接恢复后,执行
ps aux | grep gunicorn(或你使用的WSGI服务器)确认服务是否正常启动 - 查看服务日志(如
/var/log/gunicorn.log)排查启动或请求异常
- SSH连接恢复后,执行
- 检查负载均衡安全组:确保负载均衡入站规则允许HTTP/HTTPS流量,出站规则允许访问目标组的服务端口(如8000)
3. 额外验证点
- 确认实例公网IP配置:检查实例是否分配了弹性公网IP(EIP),或所在公有子网是否自动分配公网IP
- 私有子网NAT网关检查:若实例在私有子网,确认NAT网关配置正确,实例可通过NAT访问公网
- 本地网络排查:在Mac OS终端执行
traceroute ec2-xx-xx-xx-xx.compute-1.amazonaws.com,查看链路是否有阻断,同时确认本地防火墙未拦截SSH/Ping流量
内容的提问来源于stack exchange,提问作者Inyoung Chang
相关产品推荐
相关产品推荐

