Nginx(四)-- 配置文件之location

1.location的作用

location主要做定位功能,根据uri来进行不同的定位。

2.location的语法

location [=|~|~*|^~] /uri/ { …}  

  • = 开头表示精确匹配
  • ^~ 表示uri以某个常规字符串开头,相当于匹配uri路径
  • ~ 区分大小写的正则匹配
  • !~ 区分大小写不匹配
  • !~* 不区分大小不匹配
  • ~* 不区分大小写的正则匹配
  • / 通用匹配

server中可以有多个location,来进行匹配。

3.匹配的优先级 — 精准匹配 > 一般匹配

(1) 在nginx.conf文件中的添加如下内容:

img

第一个表示 是 一般匹配,第二个表示 精准匹配。

(2) 在 nginx/html文件夹下 新建 yiban 和 jingzhun 文件夹,分别 在里面 新建 index.html ,在 yiban/index.html中 写入 :This is yiban page.

在 jingzhun/index.html中写入:This is jingzhun page. 以作区分

(3) 从新加载nginx.con文件:./nginx -s reload

(4) 在浏览器中访问 192.168.80.128/index.html,可以 看到:This is jingzhun page.

说明 精准匹配的优先级 大于 一般匹配。

img

(5) 将上图中的内容改为如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
location /index.html {
root html/yiban;
index index.html;
}

location = /index.html { # 在这里加了一个空格
root html/jingzhun;
index index.html;
}

location / {
root html;
index index.html index.htm;
}

然后重新加载配置文件,直接访问IP地址:192.168.80.128,结果 还是:This is jingzhun page.

这是因为在nginx中做了多次匹配,访问 IP地址,首先 匹配的 是 第11行,然后进去 之后 是 index.html,这个index.html 又和 第6行中的 location匹配,就跳转到jingzhun/index.html了。

4.匹配的优先级 — 正则匹配 > 一般匹配

  1. 如果两个location都是一般匹配,则会按照最常路径匹配。如下,就会匹配图中的第一个。

img

总结:

  • 先匹配uri前缀部分。
  • 因为location不是严格匹配,而是一个前缀匹配,按照上图所示,就会产生两个location匹配。
  • 如果通过192.168.80.128/prefix/mid/index.html ,那么会按照最长路径进行匹配,即匹配 第一个。
  1. 如果既有一般匹配,又有正则匹配,如下:

img

当访问 192.168.80.128/prefix/mid/java/index.html时,先匹配 第一个,然后匹配第二个。

匹配优先级:

  • 首先匹配精准路径
  • 如果两个location都是一般匹配规则,那么会按照最长路径匹配
  • 一般匹配和正则匹配的过程是:首先会选择一般匹配过程中的大前缀匹配,但是匹配过程不会停止,最大前缀匹配只是一个临时结果,nginx还会继续检查正则location。按照正则location在配置文件的物理顺序做匹配,如果匹配到一条正则location,就不会考虑后面的规则。
坚持原创技术分享,您的支持将鼓励我继续创作!
-------------本文结束感谢您的阅读-------------
分享到:
0%