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

我项目用的是本地虚拟机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文件

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

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

semodule -i my-nginx.pp

7、启用对应的服务

        1、先开启uwsgi

uwsgi --ini uwsgi.ini

        2、开启nginx服务

systemctl start nginx

大功告成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daotianmi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值