1. Location
1.1. Directive
Syntax: location [= | ^~ | ~ | ~* ] uri { commands }Defautl: CloseContext: 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
