root将请求URI整体追加到指定路径后,alias用配置值替换location匹配部分;/static/映射到/opt/backend/应选alias,全站根目录对应/var/www/html应选root。

Root 和 Alias 都是用来指定 Nginx 如何查找静态文件的指令,但它们拼接请求路径的方式完全不同——这是最容易出错的地方。
root:在请求 URI 前“追加”根路径
root 指令把整个请求的 URI(包括 location 匹配部分)直接拼在配置的路径后面。Nginx 会把 location 块匹配到的完整 URI 当作相对路径,附加到 root 指定的目录上。
例如:
- 配置:
location /static/ { root /var/www; } - 请求:
GET /static/css/style.css - Nginx 实际查找的文件是:
/var/www/static/css/style.css
注意:/static/ 是 location 的匹配前缀,也被带进了最终路径。所以 root 后面的路径通常不包含 location 中已有的子路径。
alias:用配置值“替换”location 匹配部分
alias 指令会把 location 中匹配到的那部分 URI(即 location 后面写的路径)完全替换成 alias 指定的路径,剩下的 URI 尾部再拼上去。
例如:
- 配置:
location /static/ { alias /var/www/assets/; } - 请求:
GET /static/css/style.css - Nginx 实际查找的文件是:
/var/www/assets/css/style.css
关键点:/static/ 被替换成 /var/www/assets/,而 /css/style.css 是剩余部分,直接接在后面。alias 值末尾的斜杠很重要,必须和 location 的斜杠风格一致(都带或都不带),否则可能出错。
常见误用场景与建议
- 想让
/api/映射到本地/opt/backend/下的文件?用alias /opt/backend/;,别用 root —— 否则会去找/opt/backend/api/... - 整个站点放在
/var/www/html,且域名根路径对应它?用root /var/www/html;最自然,因为所有请求 URI 都原样拼接 - location 用正则(如
~ ^/img/(.+)\.webp$)时,不能用 alias,必须用 root 或 try_files —— alias 不支持正则 location - alias 值结尾的 / 很关键:若写成
alias /var/www/assets(缺末尾 /),请求/static/test.txt会被映射成/var/www/assetstest.txt,直接 404
快速判断该用哪个
- location 路径是“真实 URL 前缀”,你希望它不参与文件系统路径?选 alias
- location 路径对应磁盘上的子目录结构?选 root
- 不确定,就打印 error log 并开启
rewrite_log on;(需调试模式),看 Nginx 实际尝试访问哪个文件路径

















