Nginx报错:uwsgi.sock failed (13: Permission denied) while connecting to upstream

410 阅读2分钟

  1.png

我项目用的是本地虚拟机centos7,搭建的django+uwsgi+nginx的环境,yum安装的nginx,搜了一下说是SELinux没有权限的问题,用命令

setenforce 0	

先临时关闭了SELinux,试了一下发现问题解决了,可以访问了。

出现此问题的原因是 SELinux(Security-Enhanced Linux)是一个为Linux内核提供访问控制安全策略的机制,基于最小权限原则的情况下默认拦截了咱们的Nginx的请求,SELinux其实是Linux的安全子系统用途是在于增强系统抵御 0-Day 攻击,提供更安全的访问控制。

有的说是不用yum安装需要用编译的方法安装,可以解决SELinux的权限问题。我都已经安装好了想着设置正确的访问控制规则应该就可以解决这个问题。

1、查看SELinux的状态

(damiadmin) [root@bogon backend]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31

可以看到我开启了SELinux

2、打开网络访问权限

setsebool -P httpd_can_network_connect 1

3、配置nginx的用户:进入/etc/nginx/nginx.conf 把原来的user nginx改成user root

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

#user nginx;
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;

4、配置uwsgi.ini的uid跟gid:找到自己项目对应的uwsgi.ini加入如下代码

#启动uwsgi的用户名和用户组
uid=root
gid=root

5、分析现有的日志并生成相对应的关联模块

ausearch -c 'nginx' --raw | audit2allow -M my-nginx

执行完这个命令可以看到在当前目录下会生成后缀为*.pp*.te文件

2.png

如果该服务器上的nginx服务未被访问过,此命令执行无效。也就是说用这个方法必须先执行一次让他走一边错误的流程,这样才能总结出来。

6、加载上一步生成的*.pp

semodule -i my-nginx.pp

7、启用对应的服务

        1、先开启uwsgi

uwsgi --ini uwsgi.ini

        2、开启nginx服务

systemctl start nginx

3.png

大功告成

​ ​