AWS EC2中Django项目公网IP无法访问的问题求助
解决方案:AWS EC2上Django服务公网无法访问问题
核心排查方向
根据你描述的情况(本地回环访问正常、公网/本地浏览器无法连接),问题大概率出在网络链路连通性或服务绑定配置上,按以下优先级逐步排查:
1. 确认Django服务是否正确绑定公网可访问地址
执行以下命令检查服务监听地址:
ss -tulpn | grep 8000
- 正常输出应包含
0.0.0.0:8000,说明服务绑定了所有网卡,允许外部访问 - 如果输出是
127.0.0.1:8000,说明服务仅绑定回环地址,外部无法访问:- 杀掉现有Django进程:
kill -9 <进程PID>(PID从上述命令结果中获取) - 重新启动服务:
python manage.py runserver 0.0.0.0:8000,确保命令执行无误
- 杀掉现有Django进程:
2. 验证EC2实例防火墙配置生效
你已执行firewall-cmd开放端口,但需确认配置已重载:
# 重启防火墙服务使配置生效 sudo firewall-cmd --reload # 查看已开放端口列表,确认8000/tcp存在 sudo firewall-cmd --list-ports
如果端口未在列表中,重新执行开放命令并重载:
sudo firewall-cmd --add-port=8000/tcp --permanent sudo firewall-cmd --reload
3. 检查AWS VPC网络配置
3.1 路由表配置
登录AWS控制台,进入VPC -> 路由表:
- 找到EC2实例所在子网关联的路由表
- 确认存在一条路由规则:
目标0.0.0.0/0,目标类型为Internet Gateway(IGW)- 如果没有该规则,实例无法与公网通信,需添加指向IGW的默认路由
3.2 网络ACL(NACL)配置
进入VPC -> 网络ACL:
- 检查入站规则:允许
8000/tcp从0.0.0.0/0访问 - 检查出站规则:允许
1024-65535/tcp(动态端口范围)的响应流量返回,或直接允许所有出站流量(临时测试用)
4. 排除本地网络限制
- 切换至手机热点等其他网络,尝试访问
http://<公网IP>:8000,排除本地防火墙/代理拦截 - 在其他云服务器或在线终端执行
curl -v http://<公网IP>:8000,验证是否是本地网络问题
关于Ping不通的说明
AWS EC2实例即使安全组开放ICMP,部分ISP或区域可能会屏蔽Ping请求,Ping不通不代表端口无法访问,重点以8000端口的连通性测试为准。
内容的提问来源于stack exchange,提问作者ClarkWang
相关产品推荐
相关产品推荐

