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

AWS Ubuntu EC2上Django应用无法连接问题求助

解决EC2上Django runserver外部访问超时的问题

哥们,我之前在EC2上部署Django时也踩过一模一样的坑!咱们一步步来排查解决:

1. 最核心的问题:你用了私有IP对外访问

EC2的私有IP(比如你用的172.31.27.208)是AWS VPC内部的专属IP,外部互联网根本无法直接访问——只有同VPC内的其他实例、或者通过VPN/Direct Connect连接到AWS的设备才能访问它。

你需要做两件事:

  • 找到EC2实例的公网IP/弹性IP:在EC2控制台的实例详情页面就能看到(如果没分配弹性IP,重启实例后公网IP可能会变,建议分配一个固定的弹性IP)。
  • 修改runserver的绑定地址,让Django监听所有网卡:
    python manage.py runserver 0.0.0.0:8000
    
    这样服务会监听实例的所有IP(包括公网IP),之后用公网IP:8000在浏览器访问试试。

2. 检查Ubuntu本地防火墙(ufw)

AWS安全组是第一道防线,但Ubuntu默认自带的ufw防火墙可能会偷偷拦截端口。执行以下命令检查状态:

sudo ufw status

如果输出显示active,说明防火墙在运行,需要手动放行8000端口:

sudo ufw allow 8000/tcp
sudo ufw reload

3. 再次确认端口监听范围

你之前用netstat -lan看到的是tcp 0 0 172.31.27.208:8000 0.0.0.0:* LISTEN,这说明服务只绑定了私有IP——外部请求打到公网IP时,实例的网卡根本不会响应这个端口的请求。改成绑定0.0.0.0:8000后,再用netstat -lan检查,应该会看到tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN,这才是正确的监听状态。

4. 测试网络连通性

如果上面的步骤都做完还是不行,在本地终端用工具测试端口是否能通:

# 用telnet测试
telnet 你的公网IP 8000
# 或者用nc(netcat)测试
nc -zv 你的公网IP 8000

如果显示连接成功,那可能是浏览器缓存、本地代理或者网络运营商的问题;如果还是超时,再回去检查AWS安全组的规则是否正确(比如入站规则的源是不是0.0.0.0/0,协议是TCP,端口确实是8000)。

内容的提问来源于stack exchange,提问作者Mykhail Kosiuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:12:50