root指令仅拼接路径,不控制权限;能否读取文件取决于操作系统用户权限,需配置user指令降权运行worker进程,并严格设置 目录属主与权限(如chown root:nginx、chmod 750),否则易触发403错误。
nginx 的 root 指令本身只负责拼接请求路径与文件系统路径,它不控制权限;真正决定“能不能读到文件”的,是操作系统层面的用户身份和目录/文件权限。所以配置 root 时,必须同步考虑运行用户和权限设置,否则常见 403 Forbidden 错误。
root 后跟的路径是“基础前缀”,Nginx 会把 location 匹配到的 URI(去掉匹配前缀部分)直接拼在后面。例如:
location /static/ { root /data/web; } → 请求 /static/logo.png → 实际查找 /data/web/static/logo.png
location /api/ { root /opt/app; } → 请求 /api/v1/users → 查找 /opt/app/api/v1/users
注意:root 路径末尾不加斜杠,Nginx 自动处理;location 中的斜杠影响匹配范围(如 /static/ 不匹配 /static),这点容易出错。
nginx 主进程可由 root 启动(用于绑定 80/443 端口),但 worker 进程必须降权运行,否则 root 权限一旦被利用,风险极高:
/etc/nginx/nginx.conf,在全局块(http 上方)添加或修改:user nginx nginx;
useradd -r -s /sbin/nologin -M nginx
ps aux | grep nginx 应显示 worker 进程 UID/GID 是 nginx,不是 rootroot 指向的目录(比如 /var/www/example)不能让 nginx 用户拥有写权限,更不能是 root 可写、其他用户可读:
chown -R root:nginx /var/www/example
chmod -R 750 /var/www/example
find /var/www/example -type f -exec chmod 640 {} ;
光配对 root 和权限还不够,还需确认几个关键点:
/var/log/nginx)必须属主 nginx:nginx,权限 700,否则 worker 进程无法写日志/var/run/nginx)同样需 nginx 属主 + 700 权限nginx -t 测试配置后,再 systemctl reload nginx,避免 reload 失败导致服务中断