Nginx中alias与root的区别

一、区别

Nginx指定文件路径有两种方式root和alias,这两者的用法区别在于对URI的处理方法不同。

示例1:

alias

location /i/{

    alias /usr/local/nginx/html/admin/

}

#若按照上述配置的话,则访问/i/目录里面的文件时,ningx会自动去/usr/local/nginx/html/admin目录找文件。

 

root

location /i/ {

    root /usr/local/nginx/html/admin

}

#若按照这种配置的话,则访问/i/目录下的文件时,nginx会去/usr/local/nginx/html/admin/i下找文件。

 

示例2:

alias

location /p_w_picpaths/ {

    alias/data/w3/p_w_picpaths/;

}

该实例中alias设置等价于root设置。

root

location /p_w_picpaths/ {

    root /data/w3;

}

 

备注:

(1)、alias是一个目录别名的定义,root则是最上层目录的定义。

(2)、还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。而root则可有可无。

 

二、配置实验

1、修改nginx.conf配置文件如下内容

    server {

        listen 80; 

        server_name www.jason3.com; 

        access_log logs/access.log main;   

       

        location /i { 

                index index.html; 

                alias/usr/local/nginx/html/admin;

        }

        location ~ ^/i/(.+\.(?:gif|jpe?g|png))${

                alias /usr/local/nginx/html/admin/$1; 

        }

2、页面根目录/usr/local/nginx/html/admin设置图片及index.html页面。

3、完成配置后启动nginx服务。访问如下结果显示:

wKiom1ZVVn_BAcAqAACOn0PYNIU791.jpg

wKiom1ZVVoHj97BNAAKPoaY-1ls714.jpg官方解释如下:

root命令

Syntax:    root path;

Default:  

root html;

Context:   http, server, location, if in location

Sets the root directory forrequests. For example, with the following configuration

 

location /i/ {

    root /data/w3;

}

The /data/w3/i/top.gif filewill be sent in response to the “/i/top.gif” request.

The path value can containvariables, except $document_root and $realpath_root.

A path to the file isconstructed by merely adding a URI to the value of the root directive. If a URIhas to be modified, the alias directive should be used.

 

alias命令

Syntax:    alias path;
Default:   —

Context:   location

 

Definesa replacement for the specified location. For example, with the followingconfiguration

 

location/i/ {

    alias /data/w3/p_w_picpaths/;

}

onrequest of “/i/top.gif”, the file /data/w3/p_w_picpaths/top.gif will be sent.

 

Thepath value can contain variables, except $document_root and $realpath_root.

 

Ifalias is used inside a location defined with a regular expression then suchregular expression should contain captures and alias should refer to thesecaptures (0.7.40), for example:

 

location~ ^/users/(.+\.(?:gif|jpe?g|png))$ {

    alias /data/w3/p_w_picpaths/$1;

}

Whenlocation matches the last part of the directive’s value:

 

location/p_w_picpaths/ {

    alias /data/w3/p_w_picpaths/;

}

itis better to use the root directive instead:

 

location/p_w_picpaths/ {

    root /data/w3;

}