root将完整uri(含location前缀)拼接到指定目录后,适用于整站托管;alias则删除location匹配部分,仅拼接剩余uri,适用于子路径映射,且alias路径必须以/结尾。

直接用 root 或 alias 部署静态网站不难,关键在选对指令、路径写准、权限配齐。root 适合整站托管,alias 更适合子路径映射——用错一个,404 就跟着来了。
什么时候该用 root?
root 指令把请求的完整 URI(包括 location 前缀)拼到指定目录后面。它最自然的用法是服务整个站点根目录。
- 配置示例:
location / { root /var/www/html; index index.html; }
访问 / → 实际读取 /var/www/html/index.html
访问 /css/app.css → 实际读取 /var/www/html/css/app.css - 适用场景:单页应用、传统 HTML 站点、所有资源都在同一目录树下
- 注意:root 值末尾不强制加斜杠,但加了也不会错;若写成 root /var/www/html/;,Nginx 会自动处理,无需担心双斜杠
什么时候必须换 alias?
alias 把 location 匹配的部分“去掉”,只把剩下部分拼到目标路径后。它解决的是“路径前缀与磁盘结构不一致”的问题。
- 配置示例:
location /static/ { alias /opt/myapp/dist/assets/; }
访问 /static/js/main.js → 实际读取 /opt/myapp/dist/assets/js/main.js
(不是 /opt/myapp/dist/assets/static/js/main.js) - 适用场景:前端构建产物放在独立目录、CDN 资源映射、部署时用软链接切版本(如 current → v2.1)
- 硬性要求:alias 后的路径必须以 / 结尾,否则 Nginx 可能拼接出错
软链接部署怎么配才稳?
用软链接做发布切换(如 /var/www/site → /home/deploy/v2.3)很常见,但 root 直接指向软链接容易因权限失败。
- 推荐做法:改用 alias,且 alias 值写死为软链接的真实目标路径
location / { alias /home/deploy/current/; } - 如果坚持用 root + 软链接,必须同时满足:
— Nginx 进程用户(如 www-data)对软链接真实路径有读权限
— 所有父目录(如 /home、/home/deploy)都有执行权限(o+x 或 g+x)
— SELinux 关闭或已为路径添加正确上下文(httpd_sys_content_t)
上线前必查三件事
- 路径是否真实存在:用 ls -l /your/path 确认目录可列、文件可读
- 权限是否匹配用户:检查 Nginx worker 进程运行用户(ps aux | grep nginx),再确认该用户对路径有 r-x 权限
- 配置是否语法正确:运行 nginx -t,通过后再 nginx -s reload,别直接重启











