编程技术分享平台

网站首页 > 技术教程 正文

Nginx配置文件中location的优先级答疑

xnh888 2024-09-25 23:40:08 技术教程 20 ℃ 0 评论

nginx相对来说已经是主流web服务器/反向代理服务器,内存占用小,并发能力超强的优势,是我们选择他的关键。

在我们刚涉及nginx时候,学习配置文件,会有一个疑问:location是不是按照先后顺序来决定优先级的。这个问题解决清楚,对我们以后深入学习有不少帮助,接下来我们分析一下location的优先级问题。

首先,答案就是:在nginx的location和配置中location的顺序没有绝对关系,与location表达式的类型有关。相同类型的表达式,字符串长的才会优先匹配。

那么,不同类型的表达式怎么区分呢,如下:

  • 等号类型 ( = ) 的优先级最高。一旦匹配成功,则不再查找其他匹配项。
  • 然后是( ^~ )类型表达式。一旦匹配成功,则不再查找其他匹配项。
  • 正则表达式类型( ~ ~* )的优先级次之。如果有多个location的正则能匹配的话, 则优先使用正则表达式最长的那个。
  • 最后是常规字符串匹配类型,则按照前缀来匹配。
  • 当然也可以说最后是根 ( / ),因为根始终是最后匹配的。

接下来,我们举例说明:

 location = / {

# 精确匹配 / ,主机名后面不能带任何字符串

 location /documents/ {

# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索

# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条

 location ^~ /images/ {

# 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。

 location ~* \.(gif|jpg|jpeg)$ {

# 匹配所有以 gif或jpg或jpeg 结尾的请求

# 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则

# 这里反斜线是取反的意思,取反后面的正则里面的点

现在对前面4个例子中出现的符号进行解释:

^~ 开头表示uri以某个常规字符串开头,不是正则匹配

~ 开头表示区分大小写的正则匹配;

~* 开头表示不区分大小写的正则匹配

/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到

明天再举几个例子进行分析,今晚先写这么多。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表