nginx worker进程访问文件必须同时具备目录的x(执行)权限和文件的r(读)权限,因为x权限用于逐级进入路径中每一级父目录,r权限用于读取文件内容或目录列表(如autoindex、try_files),缺一即触发403错误。

因为 Nginx worker 进程需要读取文件内容并发送给客户端,如果物理目录没有读取(r)权限,Nginx 就无法列出目录下有哪些文件;更关键的是,**没有执行(x)权限,Nginx 甚至无法进入该目录**——Linux 系统中,“进入目录”这个动作依赖的是目录的 x 权限,不是读或写。
为什么必须有 x 权限?
即使你只打算提供某个具体文件(比如 /assets/logo.png),Nginx 仍需先访问目录路径才能定位到该文件。例如:
- 请求
/assets/logo.png - Nginx 根据
alias /data/web/assets/;得出目标路径为/data/web/assets/logo.png - 要打开这个文件,它必须依次进入:
/data→/data/web→/data/web/assets - 每级目录都需有 x 权限,否则在某一级就会卡住,返回
403 Forbidden
为什么读取(r)权限也不能少?
除了访问单个文件,以下情况还明确依赖目录的 r 权限:
- 启用
autoindex on时,Nginx 要读取整个目录列表生成 HTML 页面 - 使用
try_files $uri $uri/ /index.html时,Nginx 需检查$uri/是否为有效子目录(即判断该路径是否存在且可遍历) - 调试时查看错误日志,若权限不足,日志通常显示
"Permission denied" (13: Permission denied),而非"No such file"
典型权限设置建议
以 /mnt/shared/assets/ 为例,推荐这样设置:
-
chmod 755 /mnt/shared/assets(所有者 rwx,组和其他人 rx) -
chown www-data:www-data /mnt/shared/assets(确保 Nginx 运行用户是所有者或所属组) - 父目录(如
/mnt/shared)也需至少755,否则 Nginx 根本走不到目标目录
Windows 下虽无严格 r/x 区分,但仍需确保 Nginx 进程用户(如 Local Service)对目标路径有“读取和执行”权限,否则同样报 403。











