Nginx 的 root 指令必须使用绝对路径,不支持相对路径;写 root ./dist; 或 root html; 会导致 404/403,因其将值作字面拼接且不基于配置文件位置解析,应写如 root /var/www/my-app; 并验证路径存在、含 index.html、权限正确。
Nginx 的 root 指令不支持相对路径,写相对路径(比如 root ./dist;、root html; 或 root ../frontend;)一定会出问题——不是配置校验失败,就是访问时返回 404 或 403。
这是因为 root 从不基于配置文件位置、当前工作目录或 Nginx 安装路径去“推算”路径。它只把值当作字面字符串处理;如果没以 / 开头,Nginx 会尝试在自身工作目录(通常是 /var/lib/nginx 或 /usr/local/nginx)下找,而那里几乎肯定没有你的项目文件。
直接写完整路径,例如:
root /var/www/my-app;root /home/deploy/project/dist;root /opt/frontend/build;确保这个路径:
ls -l /你写的路径 验证);index.html(或你 index 指令指定的默认文件);www-data、nginx)有读取权限(drwxr-xr-x 或至少 r-x 目录权限 + r-- 文件权限)。sudo nginx -t 检查语法是否合法;tail -f /var/log/nginx/error.log,访问页面时它会明确打印类似open() "/var/www/my-app/about.html" failed (2: No such file or directory)
——这就是 Nginx 实际查找的路径,一眼就能看出拼接是否正确;
curl -I http://localhost 或浏览器访问,结合日志交叉验证。有人想用 location / { alias ./dist/; },这是错的:alias 同样要求绝对路径,且 ./dist/ 会被解释为 Nginx 工作目录下的子目录,依然不可靠。alias 也必须写成 alias /home/user/dist/;,末尾 / 不能省。
在 Windows 下若路径含空格或盘符,需加英文双引号,例如:
root "C:/my-project/dist";
但依然必须是绝对路径,不能写 root "dist";。
不复杂但容易忽略。