location 表达式类型
- ~ 表示执行一个正则匹配,区分大小写
- ~* 表示执行一个正则匹配,不区分大小写
- ^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location。
- = 进行普通字符精确匹配。也就是完全匹配。
space
通用匹配,匹配前缀 格式一般为location[space]/
,优先级最低
普通匹配:
- location = URI { configuration } #精确匹配,匹配成功立即返回
- location ^~ URI { configuration } #前缀匹配,匹配成功立即返回
- location [space] URI { configuration} # # 前缀匹配, 不返回,等待正则匹配结果
正则匹配
- location ~ URI { configuration } #大小写敏感匹配
- location ~* URI { configuration } #大小写不敏感匹配
location 示例
1.精准匹配
location = /abc {
……
}
如下是匹配的
# http://website.com/abc
# http://website.com/abc?name=abcdd&age=100 因为不会去匹配query_string
可能会匹配,也可以不匹配,取决于操作系统的文件系统是否大小写敏感
# http://website.com/ABC
如下是不匹配的
# http://website.com/abc/
# http://website.com/abc/bbb
2.精准前缀匹配
location ^~ /abc {
……
}
如下是匹配的
# http://website.com/abc
# http://website.com/abc/
# http://website.com/abcdefg?name=abcdd&age=100
如下是不匹配的
# http://website.com/abd
# http://website.com/ab
3.常规匹配
location /abc {
……
}
如下是匹配的
# http://website.com/abc
# http://website.com/abc/
# http://website.com/abcdefg?name=abcdd&age=100
如下是不匹配的
# http://website.com/abd
# http://website.com/ab
他和 ^~ 唯一的区别就是当命中一个规则时, 不会停止匹配
4.区分大小写正则匹配
location ~* /abc$ {
……
}
如下是匹配的
# http://website.com/abc
# http://website.com/abc?name=string&aa=bb
如下是不匹配的
# http://website.com/Abc
# http://website.com/abcde
5.不区分大小写正则匹配
location ~ /abc$ {
……
}
如下是匹配的
# http://website.com/aBc
# http://website.com/ABC
# http://website.com/abc?name=string&aa=bb
如下是不匹配的
# http://website.com/abcde
匹配优先级
- 先进性精准匹配,如果命中立即返回结果并结束解析的过程;
- 精准匹配未命中进行
^~
前缀匹配, 如果命中立即返回结果 - 精准匹配未命中判断普通匹配,如果命中多个会记录下"最长的"命中结果,但不会结束解析;
- 继续判断正则匹配,按照正则匹配设置的规则正则表达式进行匹配,如果有多个正则匹配由上到下进行匹配,一旦匹配成功一个会立即返回结果并结束解析.
普通匹配的前后顺序是无所谓的,因为记录的是最长的结果,而正则匹配是按从上到下匹配的,这个需要注意!!!
root 、alias指令区别
location /img/ {
alias /var/www/image/;
}
若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件
location /img/ {
root /var/www/image/;
}
若按照这种配置的话,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件。]
alias是一个目录别名的定义,root则是最上层目录的定义。
还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无
演示
location = / {
# 只匹配 / 的查询.
}
location / {
# 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将该段处理
}