AWS EC2实例端口8000无法访问(其他端口正常)
排查EC2上Django 8000端口无法外部访问的问题
以下是针对性的排查步骤,按优先级逐一验证:
验证Django绑定地址
Django默认仅监听127.0.0.1(本地回环),这种情况下外部无法连接。启动时必须指定绑定所有网卡地址:python manage.py runserver 0.0.0.0:8000可以用
netstat -tulpn | grep 8000确认监听地址是0.0.0.0:8000,而不是127.0.0.1:8000。检查本地防火墙规则
两年前配置3000端口时可能开放了本地防火墙,但此次未同步操作:- 若用
ufw,执行sudo ufw status查看8000端口是否允许,未开放则运行sudo ufw allow 8000/tcp - 若用
iptables,执行sudo iptables -L检查INPUT链是否有允许8000端口的规则,缺失则添加:sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT sudo iptables-save > /etc/iptables/rules.v4 # 保存规则,避免重启失效
- 若用
核对安全组入站规则细节
即使你按3000的配置复制,仍需确认:- 规则的源地址是否为
0.0.0.0/0(允许所有外部IP)或你指定的合法IP段,而非限制了特定未包含你当前IP的范围 - 规则的协议是TCP,端口范围精确为
8000 - 实例是否绑定了多个安全组,其他安全组是否存在拒绝8000端口的规则
- 规则的源地址是否为
检查VPC网络ACL(NACL)
安全组允许流量但NACL拦截的情况也很常见:- 进入VPC控制台,找到实例所在子网的NACL
- 确认入站规则允许
TCP 8000流量,同时出站规则允许TCP 1024-65535(Django响应的临时端口范围)——NACL是无状态的,入站和出站需同时配置
确认访问用的公网IP正确性
确保外部访问时使用的是实例的公网IP/弹性IP,而非内网私有IP。可在实例内执行curl ifconfig.me获取当前公网IP,再用该IP测试访问http://<公网IP>:8000
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

