Nginx访问root路径需逐级目录均有执行(x)权限,缺任一级即403;关键在于从/开始所有父目录(如/home/user)必须对nginx用户开放x权限,否则无法进入,即使目标文件权限正确也无效。

因为 Nginx 要成功访问 root 指令指定的最终路径(比如 /home/user/www/index.html),不仅需要目标文件有读权限,还要求**从根目录(/)开始,每一级父目录都必须对 Nginx 工作进程用户具备“执行”(x)权限**。缺任何一级,就会 403。
目录执行权限是关键门槛
Linux 中,“执行权限”对目录而言不是运行程序,而是“能否进入该目录、能否访问其下的子项”。Nginx 必须逐层 cd 进入路径才能定位到文件,所以:
-
/→ 需要其他用户(others)有x(通常是 755) -
/home→ 需要其他用户有x -
/home/user→ 如果是root用户家目录,默认权限常为700,其他用户无x→ 直接卡住,返回 403 -
/home/user/www→ 即使这里设了 755,前面一步进不去,也无效
常见高危路径组合
以下配置极易触发 403,尤其在开发测试时随手放项目:
-
root /root/myapp;→/root默认仅 root 可访问,nobody/nginx 用户进不去 -
root /home/alex/project/dist;→ 若/home/alex权限是700,nginx 用户无法穿越 -
root /srv/www;→ 若/srv或/srv/www所属用户不是 nginx,且未开放其他用户执行权,也会失败
怎么快速验证和修复
不用猜,三步定位:
- 查 Nginx 工作进程用户:
ps aux | grep "nginx: worker"(常见为nginx、www-data或nobody) - 模拟该用户访问路径:
sudo -u nginx ls -l /home/user/www(会报 Permission denied 就说明卡在某一级) - 逐级检查并补执行权限:
sudo chmod o+x /home /home/user(仅开放执行,不开放写,更安全)
比改权限更推荐的做法
避免在用户家目录或受限系统目录部署网站:
- 把静态资源放到标准位置,如
/var/www/html或/usr/share/nginx/html - 确保该路径所有者与 Nginx 用户一致:
sudo chown -R nginx:nginx /var/www/html - 设合理权限:
sudo chmod -R 755 /var/www/html(目录) +644(文件)


















