当前位置: 首页 > news >正文

CentOS Stream 下 Nginx 403 权限问题解决

最近在 B 站跟黑马学运维,传送地址:https://www.bilibili.com/video/BV1heK3znEeH?p=33&vd_source=d87d2c69a2fd95640b02bb71c72f29ca。在部署前端项目时,Nginx 一直返回 403 Forbidden ,静态资源死活访问不了。作为 CentOS Stream 系统的“受害者”,踩了一堆权限坑后,终于解决,把过程整理成这篇文章,帮大家避坑!

在这里插入图片描述

起因是我访问服务器地址 ,浏览器持续显示 403 Forbidden ,Nginx 错误日志疯狂输出 Permission denied ,静态文件完全无法访问。

在这里插入图片描述

最开始认为是文件权限问题,用 ls -l 查看 /var/www/dist 目录,发现文件权限好像确实不对。

然后用常规命令修改权限:

chown -R nginx:nginx /var/www/dist
chmod -R 755 /var/www/dist

改完重启 Nginx ,但是还是一样的显示!显然,不是设置这个权限的问题。

后来一想,是不是我nginx的配置文件问题,重新修改了一次配置文件,还是不行。甚至我还在想是不是我的后端有问题,也去检查了一下后端通信,发现没有问题,但是还是显示不了。最后当我要放弃的时候,灵机一动,想着有没有可能是系统的问题(因为之前遇到过),然后就去查了一下,发现CentOS Stream 默认开启 SELinux,它会通过“安全上下文”额外限制进程访问文件。用 getenforce 检查,果然是 Enforcing 模式。

在这里插入图片描述

这样即使我们的 Linux 权限正确,SELinux 不允许的话,Nginx 仍无法访问文件。
找到了问题的根源,终于可以解决了。首先我们先关闭一下SELinux,执行下面的命令:

setenforce 0  # 临时关闭,重启系统后失效

关闭后立即访问了一下,发现可以正常打开前端页面了(开心到起飞!):在这里插入图片描述

这就说明了 SELinux 是主要原因,接下来我们配置永久规则(之前那个命令系统重启后就失效了):

这里有两种方法,第一个是直接修改 /var/www/dist 目录及其子文件的 SELinux 安全上下文,将其标记为 httpd_sys_content_t 类型,明确允许 Nginx 访问。
安全上下文是 SELinux 的核心控制机制,每个文件和进程都有特定的标签,SELinux 根据标签决定是否允许访问。我们给 /var/www/dist 目录设置正确的 SELinux 安全上下文:

chcon -Rv --type=httpd_sys_content_t /var/www/dist  
setsebool -P httpd_can_network_connect 1

第二个方法是通过修改 SELinux 的 布尔值(Boolean) 规则,允许 Nginx读取用户目录下的文件。
布尔值是 SELinux 中一种灵活的开关机制,可以在不改变文件安全上下文的情况下,临时或永久调整进程的访问权限。通过布尔值灵活开放权限:

setsebool -P httpd_read_user_content 1  
sudo setsebool -P httpd_can_network_connect 1

这就是解决这个问题的方法啦,如果你遇到这种类似的问题,修改权限解决不了,可以试试从系统层面来试着解决一下哦!!!

http://www.dtcms.com/a/263713.html

相关文章:

  • jQuery UI 安装使用教程
  • 使用Spring Boot 原始的文件下载功能,告别下载风险!
  • Python实例题:基于 Flask 的任务管理系统
  • 数据结构:递归:组合数(Combination formula)
  • vue3中实现高德地图POI搜索(附源码)
  • 主流零信任安全产品深度介绍
  • 网络的相关概念
  • 港美股证券交易系统综合解决方案:技术架构革新与跨境服务升级
  • docker windows 安装mysql:8.0.23
  • Next.js 安装使用教程
  • Zephyr RTOS 信号量 (Semaphore)
  • 基于3D卷积神经网络与多模态信息融合的医学影像肿瘤分类与可视化分析
  • 商品中心—17.缓存与DB一致性的技术文档
  • Linux: network: 性能 pause
  • 【项目笔记】高并发内存池项目剖析(二)
  • Leetcode力扣解题记录--第49题(map)
  • 二型糖尿病居家管理小程序的设计与实现(消息订阅、websocket及时通讯、协同过滤算法)
  • OpenCV CUDA模块设备层-----“小于阈值设为零” 的图像处理函数thresh_to_zero_func()
  • 学习面向对象
  • 渗透测试(Penetration Testing)入门:如何发现服务器漏洞
  • 第2章,[标签 Win32] :兼容 ASCII 字符与宽字符的 Windows 函数调用
  • React:利用React.memo和useCallback缓存弹窗组件
  • 欢乐熊大话蓝牙知识24:LE Secure Connections 是 BLE 的安全升级术
  • HarmonyOS应用开发高级认证知识点梳理 (一) 布局与样式
  • 微信小程序使用秋云ucharts echarts
  • 利用springEvent,进行服务内部领域事件处理
  • 安卓接入百度定位和地图SDK
  • Go并发模式精要:掌握Goroutine与Channel的实战艺术
  • 开篇:GORM入门——Go语言的ORM王者
  • 物联网数据洪流下,TDengine 如何助 ThingLinks 实现 SaaS 平台毫秒级响应?