解决Debian环境下Django+Nginx+Gunicorn部署的502 Bad Gateway错误
Django部署Nginx+Gunicorn 502 Bad Gateway问题解决
问题概述
在Linode Debian服务器上部署Django项目,采用Nginx+Gunicorn架构,全局安装依赖后,原8000端口运行正常,但生产环境部署后出现502错误,Nginx日志提示找不到指定的project.sock文件,且项目目录中确实不存在该文件。
已完成的配置:
- Gunicorn服务文件
/etc/systemd/system/gunicorn.service:
[Unit] Description=Gunicorn service for project After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/var/www/DjangoApp/ ExecStart=/usr/local/bin/gunicorn --workers 3 --bind unix:/var/www/DjangoApp/project.sock project.wsgi:application [Install] WantedBy=multi-user.target
- Nginx站点配置
/etc/nginx/sites-available/project:
server { listen 80; server_name 111.111.111.11; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /var/www/DjangoApp/; } location / { include proxy_params; proxy_pass http://unix:/var/www/DjangoApp/project.sock; } }
核心原因
sock文件未生成,本质是Gunicorn服务未正常启动——正常情况下,Gunicorn启动时会自动在配置的路径创建sock文件,无需手动创建。
解决步骤
1. 检查Gunicorn服务状态
执行命令查看服务运行情况:
sudo systemctl status gunicorn
若服务显示失败/未启动,查看详细日志定位问题:
sudo journalctl -u gunicorn
常见问题及修复:
- 权限不足:
www-data用户无项目目录读写权限,执行:sudo chown -R www-data:www-data /var/www/DjangoApp/ - Gunicorn路径错误:全局安装的Gunicorn路径可能不是
/usr/local/bin/gunicorn,验证路径:
若路径不符,修改which gunicorngunicorn.service中的ExecStart路径。 - WSGI模块路径错误:确认
project.wsgi:application是否正确——从目录结构看,/var/www/DjangoApp/project/wsgi.py存在,路径无误,但需确保www-data能读取该文件。
2. 手动启动Gunicorn测试
跳过systemd,手动启动Gunicorn,直接查看终端报错:
sudo -u www-data /usr/local/bin/gunicorn --workers 3 --bind unix:/var/www/DjangoApp/project.sock project.wsgi:application
若启动失败,终端会输出具体错误(如依赖缺失、配置错误),针对性修复后再重启服务。
3. 优化配置(可选)
建议将sock文件放在系统规范的临时目录/run/,避免权限或清理问题:
- 修改
gunicorn.service:[Service] User=www-data Group=www-data WorkingDirectory=/var/www/DjangoApp/ ExecStart=/usr/local/bin/gunicorn --workers 3 --bind unix:/run/project.sock project.wsgi:application RuntimeDirectory=gunicorn - 修改Nginx站点配置中的
proxy_pass:proxy_pass http://unix:/run/project.sock; - 重启服务:
sudo systemctl daemon-reload sudo systemctl restart gunicorn nginx
4. 其他502错误排查方向
- 验证Nginx配置:检查配置语法是否正确,再重载服务:
sudo nginx -t sudo systemctl reload nginx - Django生产环境配置:确保
settings.py中:DEBUG=FalseALLOWED_HOSTS包含服务器IP111.111.111.11或域名
- 防火墙设置:开放80端口:
sudo ufw allow 80 - 查看Django日志:在
settings.py配置日志输出,排查项目内部错误。
内容的提问来源于stack exchange,提问作者A_K
相关产品推荐
相关产品推荐

