«

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 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 指向的目录里确实有你的文件。

排查步骤

  1. 先看错误日志
tail -f /var/log/nginx/error.log

日志里会写得很清楚是什么原因。

  1. 检查文件权限
ls -l /var/www/html/
  1. 检查 SELinux
getenforce
  1. 检查 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 协助处理

标签: Nginx SELinux 报错排查 403 Forbidden 权限不足