当前位置: 首页 > 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.lqws.cn/news/603055.html

相关文章:

  • 大模型-分布式论文一瞥
  • 植物small RNA靶基因预测软件,psRobot
  • Reactor ConnectableFlux支持多订阅者
  • RabbitMQ:消息队列的轻量级王者
  • 顶级SCI极光优化算法!PLO-Transformer-GRU多变量时间序列预测,Matlab实现
  • ChatGPT + GitHub Copilot + Cursor 实战提升编程效率
  • 量化选股策略 聚宽
  • 【硬核拆解】英伟达Blackwell芯片架构如何重构AI算力边界?
  • 【C++】头文件的能力与禁忌
  • BFD故障检测技术之概述
  • 【ArcGIS】矢量数据的叠加分析
  • 类加载生命周期与内存区域详解
  • 胖喵安初 (azi) Android 应用初始化库 (类似 Termux)
  • 物联网数据洪流下,TDengine 如何助 ThingLinks 实现 SaaS 平台毫秒级响应?
  • k8s将service的IP对应的不同端口分配到不同的pod上
  • 主流零信任安全产品深度介绍
  • 蓝牙音频传输协议深度解析:A2DP、HFP、AVRCP 对比与面试核心考点
  • ECOVADIS评级提升的关键策略,ECOVADIS评级体系
  • (论文总结)语言模型中的多模态思维链推理
  • DBA 命令全面指南:核心操作、语法与最佳实践
  • C语言再学习—内存,链表
  • React Native 接入 eCharts
  • RocketMQ延迟消息是如何实现的?
  • 前端处理跨域的4种方式
  • 为什么js是单线程?
  • 转录组分析流程(七):GSEA分析
  • 安装emsdk 4.0.10报Connection reset by peer解决
  • OpenCV篇——项目(一)OCR识别读取银行卡号码
  • 内部类与Lambda的衍生关系(了解学习内部类,Lambda一篇即可)
  • Windows10/11 轻度优化 纯净版,12个版本!