首页 / 新闻资讯 / 技术教程

Nginx 403 Forbidden 排查路径:权限、索引与 SELinux

2026-10-13分类:技术教程管理员

## 症状现象

网站突然整站或某个目录打不开,页面显示 403 Forbidden,Nginx 错误日志里记录着拒绝原因。403 的含义是"请求到达了,但 Nginx 不肯把文件给你",与 404 的"找不到"不同:文件路径是对的,卡在读取资格上。常见原因按出现频率排序:文件系统权限、索引指令配置、SELinux 安全上下文,逐层排查通常十分钟内收口。

## 权限层:两处易错

第一处是文件本身与目录的读权限。Nginx 工作进程要以它的运行账号读取文件,路径上任何一级目录缺执行位、文件缺读位,都会 403。错误日志此时是 Permission denied。检查:

bash
namei -l /var/www/example/index.html

namei 逐级列出路径上每个目录的权限,比肉眼 ls 一层层翻高效得多。第二处易错点是目录访问没有索引文件:请求落在目录上,目录里没有 index 指定的文件(默认找 index.html),又没有开目录列表,Nginx 只能拒绝。index.html 拼写错误、首页文件名配置不匹配都属于这类,日志里提示 directory index forbidden。

## SELinux 层

启用了 SELinux 的系统(部分发行版默认 enforcing)还有第三道关卡:安全上下文。文件权限全对、配置无误仍 403,日志里出现 permission denied 但 chmod 无效,基本就是它。Web 根目录的上下文类型不对,Nginx 进程被安全策略拦截。处理方式是给目录打上正确的站点上下文标记并递归应用,之后 restorecon 保持。临时验证可以切宽容模式对照行为,确认后再以正式方式恢复严格模式,别拿宽容模式当长期方案。

## 配置层与预防

配置层的坑还有:location 里写了 allow 与 deny 的来源限制,你的 IP 不在白名单;autoindex 想开目录浏览却写错位置。排查时 error.log 永远是第一现场,三种典型日志对应三类原因,先读日志再动手能省一半时间。预防上,部署脚本统一权限模板,变更目录后跑一遍 namei 自检;顺云云服务器上部署新站点时把"首页可访问"作为上线检查单第一项,403 早发现早处理。顺带一提 403 与 401 的区分:401 是没登录,403 是登录了也不给看,别把认证问题当权限问题修。

技术教程