使用uWSGI+Nginx部署Django遇权限错误及502问题求助
解决uWSGI+Nginx部署Django时的502权限问题
这问题我之前部署Django时也踩过坑,核心原因就是Nginx进程没有权限访问uWSGI创建的Unix socket文件——毕竟你直接用uWSGI的http模式能正常跑起来,说明Django和uWSGI本身的配置没毛病,就是socket的权限卡壳了。
先看你Nginx日志里的connect() to unix:///var/... (13: Permission denied),直接指向了权限问题,给你几个靠谱的解决办法:
调整socket的权限与归属
打开你的myproject.ini,添加或修改这两项配置,让socket文件允许Nginx的运行用户访问:chmod-socket = 664 chown-socket = www-data:www-data注意:如果你的系统里Nginx是用
nginx用户运行的,就把上面的www-data换成nginx。改完之后重启uWSGI就行。给socket单独建个目录(更稳妥)
有些系统里/var/run/这类目录的默认权限很严,Nginx用户可能连访问目录的权限都没有。可以专门给uWSGI的socket建个目录:sudo mkdir /var/run/uwsgi/ sudo chown www-data:www-data /var/run/uwsgi/然后把
myproject.ini里的socket路径改成/var/run/uwsgi/myproject.sock,同时Nginx配置里的uwsgi_pass也要对应改成这个路径。临时验证(别长期用)
要是你想快速确认是不是权限问题,可以先给socket加全局读写权限:sudo chmod 777 /var/.../your-socket-file.sock这时候再访问网站,如果502消失了,就实锤是权限问题,赶紧换回前面更安全的664权限配置。
最后别忘了重启uWSGI和Nginx让配置生效:
sudo systemctl restart uwsgi sudo systemctl restart nginx
内容的提问来源于stack exchange,提问作者DoTheGenes
相关产品推荐
相关产品推荐

