温馨提示×

nginx日志出现403怎么解

小樊
39
2026-08-29 05:08:25
栏目: 编程语言

nginx 返回 403 Forbidden 一般不是“某一条日志”的问题,而是访问被拒绝。可以从日志本身 + 常见原因逐层排查。下面按最常见 → 较少见来给你一个实战排查清单。


一、先看日志里到底写了什么(很关键)

1️⃣ 查看 access.log

tail -f /var/log/nginx/access.log
# 或
grep " 403 " /var/log/nginx/access.log

典型 403 日志:

127.0.0.1 - - [xx/xx/xx] "GET / HTTP/1.1" 403 153

说明:

  • 请求确实到了 nginx
  • nginx 主动拒绝

2️⃣ 查看 error.log(重点)

tail -f /var/log/nginx/error.log

常见错误信息 ✅

错误信息 含义
directory index of "/xxx/" is forbidden 目录浏览被禁止
access forbidden by rule deny 规则拦截
permission denied 权限不够
failed (13: Permission denied) 文件/目录权限问题

二、最常见原因 & 对应解决方法

✅ 1. 目录或文件权限问题(最常见)

nginx 启动用户没有权限访问目录或文件。

排查

ps aux | grep nginx

通常用户是:

  • www-data(Ubuntu/Debian)
  • nginx(CentOS)

修复

chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

⚠ 注意:

  • 目录至少要有 755
  • 文件至少 644
  • 不能把网站目录放到 root 家目录

✅ 2. 没有 index 文件,且未开启目录浏览

错误示例

directory index of "/var/www/html/" is forbidden

解决方式 1:添加 index 文件

index index.html index.php;

解决方式 2:允许目录浏览(不推荐生产环境)

location / {
    autoindex on;
}

✅ 3. nginx 配置中存在 deny 规则

检查配置

grep -R "deny" /etc/nginx/

常见:

allow 127.0.0.1;
deny all;

✅ 解决:

  • 删除或调整 deny all
  • 或添加你的 IP 到 allow

✅ 4. 访问路径与 root 实际目录不匹配

错误示例

server {
    root /var/www/html;
    location / {
        try_files $uri $uri/ =404;
    }
}

但你访问的是:

/var/www/html/site/index.html

但 root 实际上应该是:

root /var/www/html/site;

✅ 解决:

  • 确认 root 指向的是 真实存在的目录

✅ 5. SELinux 导致(CentOS / RHEL 常见)

排查

getenforce

如果是 Enforcing

临时验证

setenforce 0

如果 403 消失 → 就是 SELinux

永久解决

setsebool -P httpd_read_user_content 1

或修改文件上下文:

chcon -Rt httpd_sys_content_t /var/www/html

✅ 6. PHP 站点,php-fpm 没权限

现象

  • 静态文件可访问
  • PHP 文件 403

检查

ps aux | grep php-fpm

修复

chown -R www-data:www-data /var/www/html

三、快速自检清单(90% 问题在这)

✅ root 目录是否存在
✅ nginx 用户是否有权限
✅ 是否有 index 文件
✅ 是否有 deny 规则
✅ SELinux 是否开启


四、如果你愿意,我可以直接帮你定位

你可以直接贴出:

  1. nginx 的 server 配置
  2. error.log 中 403 相关错误
  3. 系统(Ubuntu / CentOS / Docker?)

我可以 直接告诉你哪一行配置有问题,怎么改 ✅

0