SELinux 开启导致 nginx 无法读取文件
上周五上线了内部导航站,结果发现 nginx 启动后一直提示 403,检查了文件权限是正常的,用的 yum 安装的 nginx。
nginx:1.20.1
centos:7.9.2009
kernel:3.10.0-1160.119.1.el7.x86_64
检查来检查去,查不到问题,我就问 AI 是不是为 Linux 不允许 nginx 读取根目录,因为我把网页放根目录的一个文件夹里面了,AI 说可能是 SELinux 限制的,让我查文件类型。

按 AI 说的执行命令。
ls -Zd /nav
返回
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /nav
又问了一下 AI

基本可以确定是 SELinux 的问题了,需要修改文件上下文。
临时修改:chcon -R -t httpd_sys_content_t /nav
永久修改:
semanage fcontext -a -t httpd_sys_content_t "/nav(/.*)?"
restorecon -Rv /nav
如果没有 semanage,就执行:yum install -y policycoreutils-python
修改后重启 nginx 就正常了。
我去查了一下: https://www.php.cn/faq/1998831.html
确实有这种问题,以前装完系统就直接关了 SELinux,这次为了安全点就没关,没想到还有这种限制。
如果没有 AI 根据文件权限多一个点,多说一句,我估计还要个把小时才能想到是 SELinux,毕竟用的太少了,AI 多提了一句,节省了很多时间。

其他都没问题,最后还是是 403 就要怀疑这个了
我直接就是 disabled 掉,很少有人关注这个设定,一般都是一个自己 diy 的机子