最清晰可靠的做法是在每个server块中配置root指令,因其作用域优先级为location>server>http,可确保多站点间天然隔离;root路径末尾不加斜杠,且需保证nginx工作进程用户具备对应目录的读执行权限。

直接在每个 server 块里配 root,是最清晰、最可靠的做法。Nginx 不会“全局共享” root,而是按作用域逐层覆盖:location > server > http;所以不同虚拟主机之间天然隔离,互不影响。
为每个域名单独设置 server 级 root
这是最常用也最推荐的方式。每个 server 块代表一个独立站点,root 指向其专属静态资源目录:
-
server_name example.com;→root /var/www/example; -
server_name blog.site.org;→root /var/www/blog; - 请求
/index.html时,Nginx 自动拼成/var/www/example/index.html或/var/www/blog/index.html
同一台服务器托管多个子路径站点(用 location + root)
如果一个域名下要服务多个前端应用(比如 /admin/ 和 /api-docs/),不要靠一个 root 拼到底,而是用 location 显式划分:
-
location /admin/ { root /opt/apps/admin/dist; }→ 请求/admin/js/app.js查找/opt/apps/admin/dist/admin/js/app.js -
location /api-docs/ { alias /usr/share/nginx/html/redoc/; }→ 更安全,因为alias会去掉前缀,查的是/usr/share/nginx/html/redoc/index.html
多域名共用一套静态文件(慎用 http 级 root)
若所有站点确实用完全相同的静态资源(如统一 CDN 图片库),可把 root 放在 http 块,但必须满足两个前提:
- 所有
server块都不再写root,否则会被覆盖 - 各站点的 URI 结构一致(比如都通过
/images/logo.png访问) - 示例:
http { root /var/www/shared-static; },然后两个server都不设root
避坑要点
配置生效前注意这几点:
-
root路径末尾不要加斜杠(root /var/www/html;正确,root /var/www/html/;可能引发双斜杠问题) - Nginx 工作进程用户(如
www-data)必须对 root 目录有读取和执行权限(chmod 755目录,644文件) - 用
nginx -t测试语法,nginx -s reload重载,别忘了检查实际文件是否存在 - 别在
if块里写root——行为不可靠,应改用location分流











