Django配合Nginx+uWSGI部署时.sock文件丢失及模块加载失败如何解决
核心问题原因
你的错误根源是uWSGI配置的路径和模块导入格式不符合Python规范,导致uWSGI加载Django应用失败,触发配置里的vacuum=true参数自动清理了sock文件,最终nginx找不到sock文件返回500错误。
解决步骤
1. 修正dolphin_uwsgi.ini配置
修改ini文件中以下两个参数:
# 把工作目录切换到manage.py所在的目录,Python才能正确识别内层的app包 chdir = /var/www/dolphin/app/ # module参数是Python模块导入格式,用点分隔,不能用斜杠,也不需要加.py后缀 module = app.wsgi
其余配置保持不变即可。
2. 确认Emperor模式加载配置
你执行的Emperor命令默认只会加载venv/vassals/目录下的ini配置,需要把你的项目配置软链接到该目录:
ln -s /var/www/dolphin/dolphin_uwsgi.ini /var/www/dolphin/venv/vassals/
3. 校验目录权限
确保www-data用户对项目目录有完整读写权限,避免出现sock创建失败、sqlite数据库无权限访问的问题:
sudo chown -R www-data:www-data /var/www/dolphin sudo chmod -R 755 /var/www/dolphin
4. 重启服务验证
先杀掉已存在的uWSGI进程避免冲突:
sudo pkill -9 uwsgi
激活虚拟环境后重新启动Emperor:
source /var/www/dolphin/venv/bin/activate uwsgi --emperor venv/vassals/ --uid www-data --gid www-data
等待3-5秒后查看项目根目录是否生成了dolphin.sock文件,再访问站点即可正常加载。
可选手动测试命令
如果要手动测试uWSGI是否能正常加载应用,执行以下命令即可:
cd /var/www/dolphin/app uwsgi --socket ../dolphin.sock --module app.wsgi --chmod-socket=666
内容的提问来源于stack exchange,提问作者user8758206
相关产品推荐
相关产品推荐

