centOS7, nginx 403 forbidden

文章详细解释了在CentOS7系统中,由于SELinux安全机制,Nginx服务可能会遇到403Forbidden错误。问题根源在于文件安全上下文与Nginx进程类型不匹配。解决方案是通过修改文件上下文类型为httpd_sys_content_t,并使用restorecon刷新上下文,从而允许Nginx访问静态文件。
摘要由CSDN通过智能技术生成

阅读前:

  1. 此文排除了nginx存放静态文件目录与配置的静态文件目录不一致的情况。你可以百度此原因

  1. 本文探讨的是centOS7的selinux安全机制,会导致文件访问受限,从而nginx报错403

本文基于上文 nginx启动报错[emerg]bind xxx failed, permission denied(原因是selinux 安全机制端口限制) 的进一步发现问题及探究。

上文情况解决后,然后访问nginx代理的前端,会出现nginx 403 forbidden的问题,这个问题依然源于 selinux 安全机制

先简单科普一下,selinux 安全机制分为进程安全上下文、文件安全上下文。两者保持一致性则可通行!selinux 安全机制在上述问题上放行了端口限制,还需要 文件安全 限制的开放。

另外,可在某些命令加参数 -Z 来查看selinux 信息

分析验证:

  1. 首先,查看nginx 进程的selinux 信息

ps -efZ | grep nginx

结果为:

注意,红色方框内,通过冒号分隔的四个字段,代表:用户:角色:类型:级别,这些描述 selinux 的安全上下文(详知请百度),先注意第三个字段为 httpd_t 类型

  1. 查看nginx 静态文件目录(centOS下是 /usr/share/nginx/html,或者你自定义前端dist的目录)的 selinux 信息

PS:注意,我这里的目录是自定义的目录,总之是你静态文件的目录

可看到红色框内,第三个字段为 user_home_t 类型,与 nginx 进程的 httpd_t 不同,导致nginx进程无法访问该目录以及相应的文件!

因为 nginx 进程只能访问httpd_sys_content_t类型的文件,而 httpd可以读httpd_sys_content_t类型的文件。

  1. 于是,需要将该目录及子文件目录的 SELinux 信息修改为 httpd_sys_content_t

semanage fcontext -a -t httpd_sys_content_t '/yourpath/dist(/.*)?'

并刷新文件上下文信息即可(不刷新未更新,可自行查看 selinux 信息验证)

restorecon -R /yourpath/dist

总结:centOS7的selinux安全机制默认限制文件上下文访问,需要放行。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值