You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,确保命令执行无误

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:25:23