Ubuntu部署Django遇Nginx-UWSGI权限拒绝502错误求助
解决Nginx连接uWSGI套接字时的权限拒绝问题
问题根源
你遇到的Permission denied不是套接字文件本身的权限问题,而是套接字所在的/root/uwsgi目录属于root专属目录,Nginx运行用户www-data默认没有访问/root目录下子目录的权限——哪怕给套接字设了666权限,父目录的权限限制会直接阻断Nginx的访问。
解决方案
1. 迁移套接字到安全的公共目录
最稳妥的做法是把套接文件放到非root专属的目录,比如/var/run/uwsgi:
- 创建目录并赋予权限:
mkdir -p /var/run/uwsgi chown www-data:www-data /var/run/uwsgi - 修改uWSGI配置文件
/root/uwsgi/sites/testproject.ini:
将socket=/root/uwsgi/testproject.sock改为:socket=/var/run/uwsgi/testproject.sock - 修改Nginx配置文件
/etc/nginx/sites-available/testproject:
将uwsgi_pass unix:/root/uwsgi/testproject.sock;改为:uwsgi_pass unix:/var/run/uwsgi/testproject.sock;
2. 重启服务生效
- 停止现有uWSGI进程:
uwsgi --stop /tmp/project-master.pid # 如果上面命令无效,直接杀进程: pkill uwsgi - 重新启动uWSGI:
uwsgi --ini /root/uwsgi/sites/testproject.ini - 重启Nginx:
systemctl restart nginx
不推荐的临时验证方法(仅用于排查)
如果不想迁移目录,可以临时给/root目录添加其他用户的执行权限(会降低root目录安全性,不建议长期使用):
chmod o+x /root
执行后重启Nginx和uWSGI即可验证,但后续建议还是迁移到公共目录。
内容的提问来源于stack exchange,提问作者Killerbrine06
相关产品推荐
相关产品推荐

