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

无法通过Docker+Nginx访问AWS上8000端口的Django后端及Admin面板

解决Django Admin面板无法通过8000端口访问的问题

从你的配置和容器运行状态来看,Docker端口映射已正常配置(0.0.0.0:8000->8000/tcp),但外部无法访问,按以下优先级排查:

1. 检查AWS安全组入站规则

AWS实例安全组默认会拦截非授权端口的外部访问,这是最常见的原因:

  • 登录AWS控制台,找到对应EC2实例的安全组
  • 添加入站规则:协议选TCP,端口范围填8000,源地址设为0.0.0.0/0(或指定你的测试IP)
  • 保存规则后,重新尝试访问http://52.90.163.11:8000/admin

2. 验证Django的ALLOWED_HOSTS配置

Django默认仅允许本地请求,必须将服务器IP加入ALLOWED_HOSTS白名单:

  • 打开Django项目的settings.py文件
  • 修改配置为:
    ALLOWED_HOSTS = ['52.90.163.11', 'localhost', '127.0.0.1']
    
  • 重新构建后端镜像并推送至DockerHub,在AWS服务器上重新部署容器

3. 检查服务器本地防火墙

若AWS安全组配置正常,排查服务器自身防火墙是否拦截8000端口:

  • 查看ufw状态(若使用ufw):
    sudo ufw status
    
  • 若未允许8000端口,添加规则:
    sudo ufw allow 8000/tcp
    
  • 若使用iptables,执行:
    sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
    

4. 验证容器内部服务是否正常

在AWS服务器本地测试8000端口的连通性,确认容器服务状态:

  • 执行命令测试:
    curl http://localhost:8000/admin
    
  • 若返回Django登录页面(或404,说明服务正常但路径需核对),则问题出在外部网络;若连接失败,查看后端容器日志排查服务启动问题:
    docker logs mynacode_backend_1
    

额外建议:通过Nginx反向代理Admin面板(更安全)

若不想直接暴露8000端口,可修改Nginx配置将Admin路径代理至后端:

  • 修改nginx_setup.conf,新增location /admin/块:
    location /admin/ {
        proxy_read_timeout 300s;
        proxy_connect_timeout 75s;
        proxy_pass http://api;
        proxy_set_header Host $http_host;
    }
    
  • 重启Nginx容器:
    docker-compose restart nginx
    
    之后可通过http://52.90.163.11/admin访问后台,无需暴露8000端口

内容的提问来源于stack exchange,提问作者Minhaj Uddin Ansari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:25:42