Nginx 403 Forbidden权限不足原因与解决
时间:2026-10-7 07:28 作者:emer 分类: 无
前言
打开网站突然报 403 Forbidden,权限不足。这是 Nginx 最常见的报错之一。本文讲一下 403 的常见原因和解决办法。
403 是什么意思
403 Forbidden 表示服务器理解请求,但拒绝执行。说白了就是 Nginx 不让你访问这个文件/目录。
常见原因和解决办法
原因1:文件/目录权限不对
最常见的原因。Nginx 运行的用户(一般是 www)没有权限读文件。
检查权限:
ls -l /var/www/html/index.html
如果是 644 以下,或者属主是 root,Nginx 就读不了。
解决:
# 改文件权限
chmod 644 /var/www/html/index.html
# 改目录权限
chmod 755 /var/www/html
# 改属主
chown -R www:www /var/www/html
原因2:首页文件不存在
访问网站根目录,但没有 index 首页文件。
检查:
ls /var/www/html/
看看有没有 index.html 或 index.php。
解决:
- 把首页文件名改成 index.html 或 index.php
- 或者在 Nginx 配置里指定 index
index index.html index.php;
原因3:目录没有索引权限
访问一个目录,目录里没有首页文件,Nginx 又没开目录列表。
解决方法一: 放一个 index.html 进去
解决方法二: 开目录列表(不推荐,不安全)
location /uploads/ {
autoindex on;
}
原因4:SELinux 没关
CentOS7 默认开了 SELinux,会拦截 Nginx 访问文件。
检查 SELinux 状态:
getenforce
如果是 Enforcing,说明开着。
解决:
# 临时关闭
setenforce 0
# 永久关闭
vi /etc/selinux/config
# 改成 SELINUX=disabled
原因5:Nginx 配置了访问控制
Nginx 配置里限制了 IP 访问,或者需要密码。
检查配置:
grep -i "deny\|allow\|auth_basic" /etc/nginx/conf.d/*.conf
如果有 deny all 或者 IP 白名单,把你的 IP 加上或者去掉限制。
原因6:文件路径不对
Nginx 配置的 root 路径和实际文件路径不一致。
检查配置:
grep root /etc/nginx/conf.d/*.conf
确认 root 指向的目录里确实有你的文件。
排查步骤
- 先看错误日志
tail -f /var/log/nginx/error.log
日志里会写得很清楚是什么原因。
- 检查文件权限
ls -l /var/www/html/
- 检查 SELinux
getenforce
- 检查 Nginx 配置
nginx -t
常见坑
坑1:只改了文件权限没改目录权限
文件权限是 644,但上级目录权限不对,Nginx 还是进不去。
解决: 一级一级改目录权限:
chmod 755 /var
chmod 755 /var/www
chmod 755 /var/www/html
坑2:上传的文件是 root 创建的
用 root 上传了文件,文件属主是 root,Nginx 用户读不了。
解决:
chown -R www:www /var/www/html
坑3:SELinux 改了没重启
临时关了 SELinux,但重启服务器又开了。
解决: 改配置文件永久关闭,别只 setenforce 0。
坑4:用了 CDN 或 WAF
前面有 CDN 或 WAF,它们拦截了请求。
解决: 直接用服务器 IP 访问,看看是不是还是 403。如果直接 IP 访问没问题,就是 CDN/WAF 的问题。
总结
| 原因 | 解决办法 |
|---|---|
| 文件权限不对 | chmod 644 文件、chmod 755 目录 |
| 首页不存在 | 放个 index.html 进去 |
| SELinux 拦截 | 关闭 SELinux |
| IP 被限制 | 检查 Nginx allow/deny 配置 |
| 路径不对 | 检查 root 配置 |
| 属主不对 | chown www:www 目录 |
记住: 403 先看错误日志,大部分问题日志里都写得很清楚。
遇到问题加QQ23979811 协助处理