Nginx root 和 alias 路径拼接不同

FreeGuideOnline 最新 2026-07-04

nginx location /images/ { root /var/www/assets; }


**请求映射过程:**
当用户请求 `http://example.com/images/logo.png` 时:
- 最终文件系统路径 = `/var/www/assets` + `/images/logo.png`
- 即:`/var/www/assets/images/logo.png`

可以看出,URI 中的 `/images/` 前缀仍然保留在路径中。`root` 相当于定义了一个基础目录,而 URI 的每一级目录都会被逐一创建或匹配。

#### 2. `alias` 指令的路径替换
`alias` 会丢弃 location 匹配的部分,用 alias 值直接替换。

**配置片段:**
```nginx
location /images/ {
    alias /var/www/assets/;
}

同样请求 http://example.com/images/logo.png

  • location 匹配的部分为 /images/,从 URI 中移除后剩下 logo.png
  • 最终路径 = /var/www/assets/ + logo.png
  • 即:/var/www/assets/logo.png

这里 /images/ 被完全剥离,不再出现在最终的物理路径中。这就是为什么在 alias 中使用尾部斜杠极其重要。

3. 尾部斜杠的陷阱

  • 对于 alias:如果 location 以 / 结尾,alias也必须/ 结尾,否则会产生错误的路径拼接。

    错误示范:

    location /images/ {
        alias /var/www/assets;   # 缺少尾部斜杠
    }