部署于EC2的Django应用仅能通过8000端口访问如何解决?
问题修复方案
核心问题原因
- 你当前Nginx配置监听的是
8000端口,而HTTP协议默认访问端口为80,不带端口访问时默认请求80端口,自然无法命中服务 - 你实际启动的是Django自带的开发服务器
runserver,直接占用了8000端口,当前可访问的服务完全没有走Nginx代理逻辑,你配置的Gunicorn套接字代理完全没有生效,且runserver仅可用于本地开发,不能用于生产环境部署
具体操作步骤
- 修改Nginx配置文件,将监听端口改为80,调整后的配置如下:
server { listen 80; server_name mydomain.info; # to avoid any error while fetching fevicon location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/ubuntu/dev/myproject; } location / { include proxy_params; # communicate via socket file created by Gunicorn proxy_pass http://unix:/home/ubuntu/dev/myproject.sock; } }
- 验证Nginx配置语法是否正确,执行命令:
sudo nginx -t
返回success提示后,重启Nginx生效配置:
sudo systemctl restart nginx
- 停止当前运行的
runserver进程,改用Gunicorn启动服务绑定配置中指定的套接字文件:
如果尚未安装Gunicorn,先执行安装:
pip3 install gunicorn
进入项目根目录/home/ubuntu/dev/myproject后,执行启动命令:
gunicorn --workers 3 --bind unix:/home/ubuntu/dev/myproject.sock 你的项目名称.wsgi:application
注意将命令中的你的项目名称替换为你Django项目的实际名称(即包含wsgi.py文件的目录名)
4. 检查EC2实例安全组的入站规则,确保开放了80端口的公网访问权限,同时确认服务器内部防火墙(如ufw)也放行80端口
5. 直接访问你的域名mydomain.info或服务器公网IP,即可不带端口正常访问服务
内容的提问来源于stack exchange,提问作者Gintma
相关产品推荐
相关产品推荐

