1. Location
1.1. Directive
Syntax: location [= | ^~ | ~ | ~* ] uri { commands }
Defautl: Close
Context: server , location
1.2. Instroduction
URI是待匹配的请求字符串,可以是目录,可以是文件。
URI 分为标准URI和正则URI,标准URI是不包含正则表达式的URI。
URI 的优先级:
- 当Nginx接收到请求时,对部分特殊字符进行URL编码,比如空格被编码为%20,将URI标准化
- 先搜索所有的标准URI,并记录最佳匹配项(使用 = 作为标识符的情况除外)。
- 然后从上到下依次搜索正则URI,如果匹配到符合的正则URI结束匹配,并采用匹配的正则URI作为最终结果(使用^~作为标识符除外)。
- 如果遍历所有正则URI后未匹配到结果,则采用最佳匹配的标准URI作为结果。
Location 匹配符
Null | 没有任何操作符,是优先级最低的标准URI |
---|---|
= | 用于标准URI之前,当完全该location时会停止匹配,并采用该location。不再匹配其他URI。= /test/ 并不能匹配/test/index.html,仅匹配目录本身。 |
^~ | 用于标准URI之前,当该location作为匹配度最高的location时,会采用该location。不再匹配正则URI。 |
~ | 用于正则URI之前,区分大小写。 |
~* | 用于正则URI之前,不区分大小写。 |
2. Example
2.1. Nginx Configuration
server {
listen 80;
server_name *.heyang.com;
root /opt/website/web01 ;
location / {
return 200 "/\r\n" ;
}
location = /images/ {
return 200 "=/images/\r\n" ;
}
location ^~ /images/jpg/ {
return 200 "^~ /images/jpg/\r\n" ;
}
location ~ .*\.jpg$ {
return 200 "~ *.jpg\r\n" ;
}
location ~* .*\.(png|gif)$ {
return 200 "~* *.png|gif\r\n" ;
}
}
2.2. Test
[root@centos-81 ~]# curl www.heyang.com
/
[root@centos-81 ~]# curl www.heyang.com/images
/
[root@centos-81 ~]# curl www.heyang.com/images/
=/images/
[root@centos-81 ~]# curl www.heyang.com/images/jpg
/
[root@centos-81 ~]# curl www.heyang.com/images/jpg/
^~ /images/jpg/
[root@centos-81 ~]# curl www.heyang.com/images/jpg/a.jpg
^~ /images/jpg/
[root@centos-81 ~]# curl www.heyang.com/images/a.jpg
~ *.jpg
[root@centos-81 ~]# curl www.heyang.com/images/a.JPG
/
[root@centos-81 ~]# curl www.heyang.com/images/a.png
~* *.png|gif
[root@centos-81 ~]# curl www.heyang.com/images/a.GIF
~* *.png|gif