1. Location

1.1. Directive

  1. Syntax: location [= | ^~ | ~ | ~* ] uri { commands }
  2. Defautl: Close
  3. 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

  1. server {
  2. listen 80;
  3. server_name *.heyang.com;
  4. root /opt/website/web01 ;
  5. location / {
  6. return 200 "/\r\n" ;
  7. }
  8. location = /images/ {
  9. return 200 "=/images/\r\n" ;
  10. }
  11. location ^~ /images/jpg/ {
  12. return 200 "^~ /images/jpg/\r\n" ;
  13. }
  14. location ~ .*\.jpg$ {
  15. return 200 "~ *.jpg\r\n" ;
  16. }
  17. location ~* .*\.(png|gif)$ {
  18. return 200 "~* *.png|gif\r\n" ;
  19. }
  20. }

2.2. Test

[root@centos-81 ~]# curl www.heyang.com

  1. /

[root@centos-81 ~]# curl www.heyang.com/images

  1. /

[root@centos-81 ~]# curl www.heyang.com/images/

  1. =/images/

[root@centos-81 ~]# curl www.heyang.com/images/jpg

  1. /

[root@centos-81 ~]# curl www.heyang.com/images/jpg/

  1. ^~ /images/jpg/

[root@centos-81 ~]# curl www.heyang.com/images/jpg/a.jpg

  1. ^~ /images/jpg/

[root@centos-81 ~]# curl www.heyang.com/images/a.jpg

  1. ~ *.jpg

[root@centos-81 ~]# curl www.heyang.com/images/a.JPG

  1. /

[root@centos-81 ~]# curl www.heyang.com/images/a.png

  1. ~* *.png|gif

[root@centos-81 ~]# curl www.heyang.com/images/a.GIF

  1. ~* *.png|gif