云计算百科
云计算领域专业知识百科平台

Nginx 中 server 与 location 里的 root 区别及使用场景

Nginx 中 server 与 location 里的 root 区别及使用场景

  • 一:背景
  • 二:`root` 的作用
    • 1)`server` 块里的 `root`
    • 2)`location` 块里的 `root`
  • 三:实际使用场景
  • 五:`root` VS `alias`
  • 总结

一:背景

在使用 Nginx 做静态资源托管或反向代理时,经常会用到 root 指令。 但很多人第一次配置时会疑惑:

为什么我在 server 里定义了 root,还可以在 location 里再写一个?它们有什么区别?

本文就来详细解释两者的作用范围、优先级,以及一个实际的使用场景。


二:root 的作用

root 的作用是指定资源的根目录,用于将客户端请求的 URI 转换为服务器文件系统的绝对路径。

转换公式:实际路径 = root目录 + URI

1)server 块里的 root

  • 作用范围:当前 server 块内的所有 location(除非被覆盖)。

  • 特点:充当默认根目录,当 location 里没有单独设置 root 时会继承它。

示例

server {
listen 80;
server_name bird.cn;
root /opt/module/bird;

location / {
index index.html;
}
}

访问

http://bird.cn/index.html

匹配过程

URI: /index.html
root: /opt/module/bird

实际路径: /opt/module/bird/index.html

2)location 块里的 root

  • 作用范围:只在当前 location 内生效。

  • 特点:会覆盖 server 里的 root 设置。

  • 注:它会将 location 匹配到的 URI 完整拼接到 root 目录后面。

示例

location /images/ {
root /data/static;
}

访问

2025-08-16qixkudyttoo.jpg

匹配过程

URI: /images/cat.jpg
root: /data/static

实际路径: /data/static/images/cat.jpg


三:实际使用场景

场景:静态资源分不同目录存放

  • 假设目录结构:/opt/module/bird/ # 网站首页文件
    /data/static/images/ # 图片资源>
    /data/static/videos/ # 视频资源
  • 需求:访问首页 → /opt/module/bird/index.html
    访问 /images/ → /data/static/images/
    访问 /videos/ → /data/static/videos/

配置

server {
listen 80;
server_name bird.cn;

# 默认根目录
root /opt/module/bird;

location / {
index index.html;
}

location /images/ {
root /data/static;
}

location /videos/ {
root /data/static;
}
}

访问结果

  • http://bird.cn/ → /opt/module/bird/index.html

  • 2025-08-16qixkudyttoo.jpg → /data/static/images/cat.jpg

  • http://bird.cn/videos/movie.mp4 → /data/static/videos/movie.mp4


  • 五:root VS alias

    • root 会将 location 匹配到的 URI 部分 也拼接到目录路径中。

    • 如果不希望拼接匹配部分,而是直接替换成另一个目录,请用 alias。

    示例:

    location /images/ {
    alias /data/static/;
    }

    访问 /images/cat.jpg 时:

    实际路径: /data/static/cat.jpg
    而不是 /data/static/images/cat.jpg。


    总结

    • server 里的 root:默认根目录,作用于所有未单独设置 root 的 location。

    • location 里的 root:覆盖 server 里的 root,仅在当前 location 生效。

    • 拼接规则:root 会拼接匹配到的 URI 片段,alias 不会。

    📌 记住一句话:

    想按目录分类资源,用 location + root;想直接替换目录,用 alias。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Nginx 中 server 与 location 里的 root 区别及使用场景
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!