Skip to content

nginx 的 root 和 alias 区别

在 Nginx 配置中,rootalias 指令都用于定义资源文件的位置,但它们在处理请求时的行为有一些关键区别:

1. root 指令

  • root 用于指定服务器上文件的根目录。Nginx 将请求的 URI 直接添加到这个根目录路径后面,来找到文件或目录的绝对路径。
  • 例如,如果配置是 root /data/www;,那么请求 /images/picture.jpg 会被解析为 /data/www/images/picture.jpg

2. alias 指令

  • alias 用于将特定的请求 URI 映射到服务器上的一个文件或目录,但它并不像 root 那样自动添加 URI。
  • 当使用 alias 时,Nginx 会替换匹配的部分 URI,并用 alias 指定的路径代替。
  • 例如,配置 location /images/ { alias /data/photos/; } 意味着请求 /images/picture.jpg 会被解析为 /data/photos/picture.jpg。注意,alias 指令后面的路径不自动加上请求的 URI 剩余部分。

使用场景的区别

  • 使用root时,Nginx 会保留请求中的路径结构,将其添加到root指令指定的路径后面。
  • 使用alias时,Nginx 会用alias指令指定的路径替换掉请求中的匹配路径部分。

在实际使用时,选择root还是alias取决于具体的目录结构和 URL 重写的需求。

通常,如果需要保留 URL 的路径结构,使用root;如果需要重写 URL 路径,使用alias

理解这两个指令的区别非常重要,因为错误的配置可能导致文件路径解析错误,从而影响网站的功能。

在配置时要特别注意 alias 的路径结尾是否需要添加斜杠(/),这取决于你的具体需求和目录结构。

例子

下面分别为使用 rootalias 的两个简单示例配置,说明它们在 Nginx 中的使用差异。

示例 1: 使用 root 指令的 nginx.conf

此示例中,所有的静态文件请求都将映射到 /data/www 目录下的相应路径。

nginx
server {
    listen 80;
    server_name www.example.com;

    location / {
        root /data/www;
        index index.html index.htm;
    }

    location /images/ {
        root /data/www;
        autoindex on;  # 启用目录列表显示
    }
}

在这个配置中:

  • 访问 http://www.example.com/ 会显示 /data/www/index.html/data/www/index.htm
  • 访问 http://www.example.com/images/example.jpg 会显示 /data/www/images/example.jpg

示例 2: 使用 alias 指令的 nginx.conf

此示例中,/images/ 路径下的请求被映射到 /data/photos 目录。

nginx
server {
    listen 80;
    server_name www.example.com;

    location / {
        root /data/www;
        index index.html index.htm;
    }

    location /images/ {
        alias /data/photos/;
        autoindex on;  # 启用目录列表显示
    }
}

在这个配置中:

  • 访问 http://www.example.com/ 依旧显示 /data/www/index.html/data/www/index.htm
  • 访问 http://www.example.com/images/example.jpg 会显示 /data/photos/example.jpg,而不是 /data/www/images/example.jpg

关键区别

  • root 是添加 URI 到配置的目录路径后。
  • alias 则是替换 location 匹配的部分 URI,使用 alias 指定的路径作为基础路径。

这两种配置虽然在表面上看起来类似,但实际上它们处理文件路径的方式有很大的区别,根据你的具体需求选择合适的指令是很重要的。