Gunicorn与Nginx连接上游时权限被拒问题及Django站点配置咨询
解决Gunicorn+Nginx搭建Django站点时的「Permission denied while connecting to upstream」权限问题
嘿,这个权限报错我熟得很!咱们对着你给的配置一步步来排查解决:
一、先搞定目录与Socket文件的访问权限
你看,Nginx是以nginx用户运行的,而Gunicorn的socket文件存在/home/username/my_project/下面,首先得确保nginx能进到这个目录,还能读/写这个socket:
- 先给项目目录加执行权限(让nginx能进入目录):
chmod 710 /home/username/my_project - 然后,Gunicorn默认创建的socket权限是
600,只有它自己的用户能访问。咱们在启动命令里加个--umask 0007,让socket权限变成660,这样同组的nginx用户就能访问了。修改你的Gunicorn服务配置里的ExecStart行:ExecStart=/home/username/my_project/bin/gunicorn --access-logfile - --workers 3 --umask 0007 --bind unix:/home/username/my_project/my_project.sock my_project.wsgi:application - 改完后重启Gunicorn让配置生效:
sudo systemctl restart gunicorn
二、排查SELinux的限制(CentOS/RHEL系统大概率会碰到)
有时候目录和文件权限都对了,还是报错,那十有八九是SELinux在搞事情。咱们先临时关了它测试下:
sudo setenforce 0
如果这时候错误消失了,说明就是SELinux的问题。别慌,不用一直关着它,给咱们的socket加个安全上下文规则就行:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/home/username/my_project/my_project.sock" sudo restorecon -v "/home/username/my_project/my_project.sock"
加完规则再把SELinux开回去:
sudo setenforce 1
三、最后验证一下
重启Nginx服务:
sudo systemctl restart nginx
然后看看Nginx的错误日志,确认权限问题是不是解决了:
sudo tail -f /var/log/nginx/error.log
内容的提问来源于stack exchange,提问作者ssgakhal
相关产品推荐
相关产品推荐

