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

解决Debian环境下Django+Nginx+Gunicorn部署的502 Bad Gateway错误

Django部署Nginx+Gunicorn 502 Bad Gateway问题解决

问题概述

在Linode Debian服务器上部署Django项目,采用Nginx+Gunicorn架构,全局安装依赖后,原8000端口运行正常,但生产环境部署后出现502错误,Nginx日志提示找不到指定的project.sock文件,且项目目录中确实不存在该文件。

已完成的配置:

  1. 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
  1. 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 gunicorn
    
    若路径不符,修改gunicorn.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=False
    • ALLOWED_HOSTS包含服务器IP111.111.111.11或域名
  • 防火墙设置:开放80端口:
    sudo ufw allow 80
    
  • 查看Django日志:在settings.py配置日志输出,排查项目内部错误。

内容的提问来源于stack exchange,提问作者A_K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:52:53