Digital Ocean部署Django应用访问IP返回502错误如何排查解决
错误根因
你遇到的connect() to unix:/run/gunicorn.sock failed (111: Connection refused) while connecting to upstream报错,核心是Nginx无法和Gunicorn服务通信,绝大多数情况是Gunicorn未正常启动,或套接字文件权限、路径配置错误导致。
排查&解决步骤
1. 检查Gunicorn服务运行状态
执行命令查看Gunicorn状态:sudo systemctl status gunicorn
如果返回结果为failed而非active (running),执行以下命令查看Gunicorn启动错误日志:sudo journalctl -u gunicorn
常见启动失败原因及修复方法:
- 虚拟环境路径错误:确认配置中
ExecStart的/home/mainuser/Personal_Web/vr/bin/gunicorn路径真实存在,注意不要把虚拟环境目录名打错(比如常见命名是venv而非vr) - WSGI文件路径错误:确认你的Django项目中
myapp.wsgi:application路径正确,即项目根目录下存在名为myapp的子目录,子目录内有wsgi.py文件 - 依赖缺失:进入虚拟环境后执行
pip list确认Django、gunicorn及项目所需依赖均已安装 - 目录权限:确认
mainuser用户对/home/mainuser/Personal_Web目录有读写执行权限
2. 检查套接字文件状态
执行命令查看套接字状态:sudo systemctl status gunicorn.socket
如果套接字未激活,执行sudo systemctl start gunicorn.socket启动。
之后执行命令查看套接字文件权限:ls -l /run/gunicorn.sock
正常权限应为属主mainuser、属组www-data,如果权限不匹配,可在/etc/systemd/system/gunicorn.service的[Service]段新增两行配置:
RuntimeDirectory=gunicorn RuntimeDirectoryMode=0755
修改完成后执行sudo systemctl daemon-reload重载systemd配置。
3. 验证Nginx配置有效性
执行以下命令确认Nginx配置无语法错误,且站点软链接已创建:
- 创建软链接(如果未做):
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ - 配置校验:
sudo nginx -t
如果返回syntax is ok、test is successful则配置有效,否则按照提示修正错误。
4. 重启服务验证
所有配置修正后依次执行命令重启服务:
sudo systemctl restart gunicorn.socket gunicorn.service sudo systemctl restart nginx
之后再次访问服务器IP即可。
内容的提问来源于stack exchange,提问作者user15178581

