无法通过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 nginxhttp://52.90.163.11/admin访问后台,无需暴露8000端口
内容的提问来源于stack exchange,提问作者Minhaj Uddin Ansari
相关产品推荐
相关产品推荐

