nginx location配置root与alias区别

nginx location配置root与alias区别

nginx配置资源文件或静态代理都需要配置location,location中存在root与alias,那它们之间有什么区别呢?看完下文就明白它们之间具体的使用规则

1. 语法规则(按优先级)

=        表示精确匹配,优先级最高
^~       表示uri以某个常规字符串开头,用于匹配url路径(而且不对url做编码处理,例如请求/static/20%/aa,可以被规则^~ /static/ /aa 匹配到(注意是空格))

~        表示区分大小写的正则匹配
~*       表示不区分大小写的正则匹配
!~       表示区分大小写不匹配的正则
!~*      表示不区分大小写不匹配的正则
/        表示通用匹配,任何请求都会匹配到

2.root&alias文件路径配置

root/alias  是指定文件路径的两种方式,主要区别就是怎么解析location后面的uri

例如:

访问    http://localhost/app/1.jpg

location ^~ /app/{
    root /home/img;
}

这个location相当于访问服务器上的文件路径:  /home/img/app/1.jpg 

location ^~ /app/{
    alias /home/img/;
}

这个location相当于访问服务器上的文件目录:/home/img/1.jpg(即alias不会使用location后面配置的路径)

基于alias的特性可以用来做虚拟目录,比如,不同项目的图片存放在同一个图片服务器不同的位置,希望的访问方式如下:

http://localhost/app1/1.jpg

http://localhost/app2/1.jpg

location ^~ /app1/{
    alias /app1 path xxx/;
}
location ^~ /app2/{
    alias /app2 path xxx/;
}