部署Django项目遇Nginx open socket报错及500错误求助
问题排查步骤
- 先确认Gunicorn服务状态
执行命令systemctl status gunicorn查看服务是否正常运行。如果服务启动失败,执行journalctl -u gunicorn查看Gunicorn运行日志,排查是否存在虚拟环境路径错误、项目目录权限不足、wsgi模块加载失败的问题。 - 检查socket文件权限
Nginx的默认运行用户为www-data,需要确保/var/www/lordplus/lordplus.sock文件的属组为www-data,且组用户拥有读写权限,可执行以下命令修正:
你遇到的Nginxchown runadmingen:www-data /var/www/lordplus/lordplus.sock chmod 660 /var/www/lordplus/lordplus.sockopen socket left报错基本都是上游Gunicorn连接异常、socket权限不足导致的。 - 补全Nginx静态资源配置
你当前的Nginx配置中location /static/和location /media/块为空,会导致静态资源请求异常,修正为对应路径的别名:
配置完成后执行location /static/ { alias /var/www/lordplus/static/; } location /media/ { alias /var/www/lordplus/media/; }nginx -t校验语法,确认无误后执行systemctl reload nginx重载配置。 - 校验Django项目配置
- 检查
settings.py中的ALLOWED_HOSTS参数,必须添加你的域名www.domain.com,测试阶段可临时设置为['*'],DEBUG关闭状态下未配置该参数会直接返回500错误。 - 确认你已经执行
python manage.py collectstatic收集了所有静态资源到配置的STATIC_ROOT目录,路径需要和Nginx中static的别名路径一致。 - 重置系统后确认已完成数据库迁移,执行
python manage.py migrate更新数据库结构。
- 检查
- 直接测试Gunicorn服务
执行命令curl --unix-socket /var/www/lordplus/lordplus.sock http://localhost,如果能正常返回页面内容,说明Gunicorn和Django本身无问题,故障点在Nginx侧;如果返回错误,直接根据错误提示排查Django项目本身的问题。
内容的提问来源于stack exchange,提问作者Elfo
相关产品推荐
相关产品推荐

