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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:07:17