因为项目需要,要使用nginx实现反向代理,但是在部署中发现出现了502错误代码,经排查是centos7中的selinux造成的。
0、相关环境
centos:7.0
nginx:1.8.1
selinux为系统自带
1、错误现象
有两个现象:①nginx起不来(项目中是需要临时启动nginx的);②启动之后代理出现502错误。
2、nginx启动不了的解决
项目中使用的时候是根据需要临时启动nginx的,发现nginx起不来,发现将selinux关闭之后就起得来了,所以应该是selinux造成的,但是不能关闭selinux,那样做太粗暴了!
经查询,需要使用下面的命令,将对应的端口添加进selinux的允许列表中:
semanage port -a -t http_port_t -p tcp 9993
这个命令执行起来需要的时间比较长,请耐心等待。
如果系统提示没有对应的命令需要使用下面的命令安装:
yum install policycoreutils-python
3、nginx启动之后502的解决
好不容易将nginx启动之后,又发现根本不能访问被代理的内容,报告的是502错误。
经查询,也是selinux造成的!
使用这个命令就可以查看相关的信息了:
cat /var/log/audit/audit.log | grep nginx | grep denied
同样的,我们可以将这个信息制作位selinux的一个模块性质的东西,将其导入selinux,然后就可以解决问题了:
cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
这个命令会在当前目录生成两个文件:
mynginx.pp
mynginx.te
这两个文件就是我们需要的,执行命令就可以将其导入了:
semodule -i mynginx.pp
同样,这个命令也会等待一段时间,在其他的机器上导入这个模块也会得到相同的效果,将对应的端口添加进selinux
4、结论
本文记录的是centos 7 中因为selinux导致程序端口起不来和被拒绝的解决,虽然演示的是nginx以及9993端口,但是对于其他的程序和端口也是一样的,只需要对应着修改就行啦。
enjoy!!