Linode Ubuntu14.04部署Mezzanine/Django:502错误与.sock文件缺失求助
解决Ubuntu 14.04上Mezzanine/Django部署的502 Bad Gateway(.sock不存在)问题
嘿,这个502错误本质就是Nginx找不到uWSGI生成的.sock套接字文件,没法和后端的Django应用通信。咱们一步步来排查解决:
1. 先确认uWSGI是不是真的在运行
首先检查uWSGI进程有没有启动起来,敲这个命令:
ps aux | grep uwsgi
如果看不到任何和uWSGI相关的进程,说明它根本没启动成功。那咱们手动启动试试,先进入你的虚拟环境:
cd /home/django/FOLDER source Env/bin/activate uwsgi --ini 你的uWSGI配置文件名.ini # 比如uwsgi.ini或者项目名.ini
启动的时候注意看终端输出的报错,比如找不到Django模块、权限不足这些,都会导致uWSGI启动失败,自然生成不了.sock文件。
2. 核对.sock文件的路径配置
不管是uWSGI的配置还是Nginx的配置,路径必须完全一致,一点错都不能有:
- 打开你的uWSGI配置文件(比如
uwsgi.ini),找到socket项,确保路径是对的,比如:socket = /home/django/FOLDER/FOLDER.sock # 注意你有两层FOLDER目录,别搞混 - 再打开Nginx的站点配置文件(比如
/etc/nginx/sites-available/你的站点名),找到uwsgi_pass这一行:uwsgi_pass unix:/home/django/FOLDER/FOLDER.sock;
一定要检查路径里的大小写、目录层级,别把内层的FOLDER漏写或者写错了。
3. 检查.sock文件的权限问题
就算uWSGI启动了,如果.sock文件的权限不对,Nginx也没法访问它:
- 最好让uWSGI以Nginx的用户组运行,在uWSGI配置里加上这两行:
这样生成的.sock文件权限会自动适配Nginx的访问需求。uid = www-data gid = www-data - 如果已经生成了.sock但权限不对,手动调整试试:
chmod 664 /path/to/你的.sock文件 chown www-data:www-data /path/to/你的.sock文件
4. 查看uWSGI日志找细节
要是前面的步骤都没解决问题,去看uWSGI的日志文件(配置里的logto项指定了路径),里面会有详细的启动失败原因,比如:
chdir路径没设对:要指向包含manage.py的那个内层FOLDER目录- 虚拟环境没配置:uWSGI配置里要加
home = /home/django/FOLDER/Env指定虚拟环境路径 - 套接字被占用:换个.sock路径或者杀掉占用进程
5. 修改配置后记得重启服务
每次改完uWSGI或Nginx的配置,都要重启服务生效:
sudo service nginx restart sudo service uwsgi restart # 如果你用了系统服务管理的话,否则先杀掉旧进程再启动
要是还是卡壳,把uWSGI启动时的报错信息、配置文件里的关键片段贴出来,能更快定位问题哦~
内容的提问来源于stack exchange,提问作者Username
相关产品推荐
相关产品推荐

