直接在每个server块顶部写root指令,即可为该虚拟主机独立指定静态资源根目录,互不干扰;配合location可精确控制子路径,避免在http块配置root或混淆root与alias。

直接在每个 server 块顶部写 root 指令,就能为该域名或端口对应的虚拟主机指定独立的静态资源根目录。这是最常用、最清晰的做法,不需要动 http 块,也不依赖继承规则。
每个 server 块配一个 root,互不干扰
多个站点共存时,Nginx 通过 server_name 或监听端口区分请求,各自 server 块里的 root 完全独立:
-
server_name site1.com→root /var/www/site1; -
server_name site2.net→root /var/www/site2; - 监听
8080端口的管理后台 →root /opt/admin-ui;
请求 /logo.png 会分别映射到对应目录下的 logo.png,不会串用。
配合 location 精确控制子路径资源
主站用 root 设默认路径,特殊子路径(如 CDN、上传目录、前端构建产物)单独用 location + root 或 alias 覆盖:
-
root /var/www/html;(server 级,覆盖/、/about/等) -
location /uploads/ { root /data/uploads; }→ 请求/uploads/2026/photo.jpg对应文件/data/uploads/uploads/2026/photo.jpg -
location /static/ { alias /opt/app/build/static/; }→ 请求/static/main.css对应/opt/app/build/static/main.css(注意alias不拼接 location 路径)
避免常见错误写法
这些配置容易导致 404 或路径错乱,要避开:
- 在
http块里写root:基本无效,会被所有server块覆盖 -
location /api/里写root却又走后端代理:没必要,且可能触发文件系统查找失败 - 混淆
root和alias:比如用root配location /img/想指向/var/img,结果实际找的是/var/img/img/xxx - 没建好目录或权限不对:确保 Nginx 工作用户(如
www-data或nginx)有读取权限
验证是否生效的小技巧
改完配置别急着重启,先检查语法再观察日志:
- 运行
nginx -t确认配置无误 - 用
curl -I http://your-domain/favicon.ico看响应头里的Content-Length或状态码 - 查错误日志:
tail -f /var/log/nginx/error.log,403/404 会明确提示找不到哪个路径 - 临时加个
location /debug { return 200 "root is: $document_root"; },直接看 Nginx 解析出的路径










