Nginx之详解 location 匹配

本文的配置文件:vim /usr/local/nginx/conf/nginx.conf


  在浏览器输入URI后,Nginx会对URI / pattern进行”匹配“,”匹配“成功即将进行相关的操作。这时就会使用到location。
  简单归结于一句话:location就是用于URI / pattern解析的。

举例说明:192.168.88.9/image/cat.html 哪个是URI / pattern?
192.168.88.9是域名地址
URI / pattern = /image/cat.html。 location匹配的是/image/cat.html,不包括198.168.88.9

一、location的基本语法格式

location的语法: location [ = | ~ | ~* | ^~ | @ ] pattern { … }
因此,大类型可以分为三种:
精准匹配   location = pattern {}
普通匹配   location   pattern {}
正则匹配   location ~ pattern {}

二、匹配流程图

流程图解释:
(1) 如果精准匹配成功,则返回精准匹配的结果
(2) 精准匹配不成功,进行普通匹配(以匹配字符串最长的作为匹配结果),如果普通匹配成功就记忆匹配的结果
(3) 进行正则匹配,如果任何一个正则匹配成功,则返回;如果不成功,则如果(2)中记忆了普通匹配的结果,则返回它,如果没有则匹配失败。
在这里插入图片描述

三、pattern == 文件名? pattern==目录名

(1) pattern == 文件名

URI:192.168.122.1/文件名,如果URI中pattern是相匹配的一个文件名
结论:
  ① [ 文件名 必须在 index行中 出现 (如果在index行中不出现,则请求的资源得不到) ]
  ② 访问的资源 = root/文件名

在这里插入图片描述
以上图为例:
  (1) 文件名 = test.html,因此index行中必须存在test.html
  (2) 访问的结果:root/文件名 = /data/html/test.html

(2) pattern==目录名

URI中pattern是一个目录
结论:
  ① 访问的目录变成root/pattern
  ② 访问的资源 = root/目录名/index行中的匹配的文件
在这里插入图片描述
以上图为例:
  (1) 访问的目录变成root/pattern = /data/image/foo
  (2) 访问的资源 = /data/image/foo/index行中的匹配的文件,即依次匹配 /data/image/foo/cat.jpg、/data/image/foo/index.htm、/data/image/foo/index.html。

四、三类匹配

(1) 普通匹配

   语法格式:location   pattern {}
   注解:普通匹配pattern之前没有符号。

(2) 精准匹配

精准匹配根据URI分为两种情况:非常重要的难点

① 当URI的 [ pattern != / && pattern != 空 ] 时,举例分析:

在这里插入图片描述

在浏览器中输入192.168.122.1/test.html,因为输入的URI的 [ pattern != / && pattern != 空 ] ,即/test.html(非空),所以location过程是:①精准匹配到/test.html ②去index查找有没有test.html,查找成功 ③返回/data/html/test.html对应的页面

总结:因为搜索的URI是非空的,因此不会发生”内部跳转“,有页面就返回页面,没有页面就返回404 Not Found页面。
在这里插入图片描述
注解:
  (1) pattern和index中的/test.html必须同名字
  (2) root不能省略,省略后root=/usr/local/nginx/html

② 当URI的 [ pattern == / && pattern == 空 ] 时,举例分析:

在这里插入图片描述
在浏览器输入 192.168.122.1 或 192.168.122.1/ 后,location执行过程分析:
(1) 192.168.122.1 或 192.168.122.1/ 是等价的,它们的 pattern = /,所以将与图中的①发生精准匹配
(2) 发生精准匹配后,将进入①中的{ },执行到index cat.jpg,此时就是特别之处:pattern转变成 /cat.jpg ⇒ ⇒ ⇒ 就相当于在浏览器中输入了192.168.122.1/cat.jpg,pattern=/cat.jpg
(3) 会重新进行location过程,再次精准匹配①,发现 /cat.jpg 与 / 不匹配
(4) 转而去精准匹配②,发现匹配成功,就会从index中查找是否有cat.jpg ⇒ 发现index中有cat.jpg,就获得/data/html/cat.jpg资源并显示到浏览器上,如图:
在这里插入图片描述

(3) 正则匹配

语法格式:location ~ pattern {}
注意:pattern前面必须加上 ~ 符号,表示区分大小的正则匹配。~*表示不区分大小。
在这里插入图片描述
输入URI = http://192.168.122.1/image/,则~ image是正则匹配,匹配成功。将会访问/data/image/cat.jpg资源,访问成功,见下图:
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值