在配置 NGINX 文件映射时发现 root 并没有按照期待映射,找解决方法,建议换作 alias 映射目录,不解,查下文档,理解区别。

root

root 指令用于指定搜索文件的根目录。NGINX 将请求 URI 附加到 root 指定的路径。该指令可以放置在 httpserverlocation 上下文中的任何级别上。  

server {
    root /www/data;

    location / {
    }

    location /images/ {
    }

    location ~ \.(mp3|mp4) {
        root /www/media;
    }
    
    location /static/ {
        root /www/media;
    }
}

这里我们请求以 /images/ 匹配的 URI 时,NGINX 会在 /www/data/images/ 目录下查找相应的文件,但是如果 URI 以 .mp3 或 .mp4 扩展名结尾,那么 NGINX 会在 /www/media/ 目录中搜索文件,因为它是在匹配的 location 块中定义的。

如果请求以斜线结尾,NGINX 将其视为对目录的请求,并尝试在目录中查找索引文件。index 指令用于定义索引文件的名称(默认值为 index.html)。继续这个例子,如果请求的 URI 是/images/some/path/,NGINX 查找文件 /www/data/images/some/path/index.html(如果它存在)。如果不存在,NGINX 默认返回 HTTP 代码 404(未找到)。

location 中的 root 用于指定该路有的相对 root 资源目录,比如上面的 /static/ 请求会在 /www/media/static/ 下寻找匹配文件。

alias

server {
  location / {
  }
    
  location /i/ {
      alias /data/images/;
  }
}

在我们请求/i/top.gif时,将会查找/data/images/top.gif该文件。 地址中可以包含变量,具体查看文档。

当 location 匹配指令值的最后一部分时:

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

最好使用 root 指令替代:

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

总结:

  • root UIR 映射 URI + location Path
  • alias URI 映射 location

如果请求后缀和文件夹名称相同,建议使用 root