无法通过EC2公网IP访问AWS ECS部署的前后端应用求助
问题排查与解决建议
针对你遇到的ECS实例公网无法访问、内部访问正常的问题,给出以下具体排查方向:
1. 确认主EC2实例的公网基础可达性
- 本地执行
ping <主实例公网IP>,判断网络连通性:- 若ping不通,先检查主实例是否有公网IP(AWS控制台查看EC2实例的「公网IPv4地址」,为空则需绑定弹性IP)
- 检查主实例所在子网的「自动分配IPv4公有IP」选项是否开启(子网配置中需设为「是」)
- 核对网络ACL规则:入站规则需允许80端口的0.0.0.0/0流量,出站规则需允许所有响应流量(默认规则通常满足,若有修改需确认)
2. 验证主实例的端口监听与任务状态
- SSH登录主实例,执行
netstat -tulpn | grep :80,确认主机80端口是否被Docker进程监听:- 若未监听,执行
docker ps查看前端容器是否处于running状态 - 查看ECS代理日志排查任务启动问题:
cat /var/log/ecs/ecs-agent.log
- 若未监听,执行
3. 检查安全组的关联范围
- 确认安全组已正确关联所有三台EC2实例(包括主实例),避免出现仅部分实例绑定安全组的情况
4. 模拟主实例内部的公网访问
- 在主实例内执行
curl http://<主实例公网IP>:80,若仍无响应:- 检查主机iptables规则:
iptables -L,确认未拦截80端口入站流量 - 验证Docker端口映射:
docker inspect <前端容器ID> | grep -A5 -B5 "PortBindings",确认hostPort与containerPort的80端口映射正确
- 检查主机iptables规则:
5. 排查Nginx配置细节
- 在容器内执行
netstat -tulpn | grep nginx,确认Nginx监听的是0.0.0.0:80而非127.0.0.1:80(仅监听回环地址会导致外部无法访问) - 临时修改Nginx配置添加日志输出(当前配置未指定日志路径,所以无日志),在server块中加入:
重启Nginx后测试,通过日志定位请求是否到达容器access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;
内容的提问来源于stack exchange,提问作者hkisthebest
相关产品推荐
相关产品推荐

