Nginx location你需要知道这些!

场景:

在项目开发中经常会遇到nginx配置文件中,会有很多条location配置,却读不懂其中的含义而烦恼

Location是什么?

Location是Nginx中的块级指令(block directive),
通过配置Location指令块,可以决定客户端发过来的请求URI如何处理(是映射到本地文件还是转发出去)及被哪个location处理

Location基本语法

          修饰符(modifier)         
location [ = | ~ | ~* | ^~ ]     uri     { ... } 
location根据不同的修饰符可以分为两大类
  1. 前缀location(prefix location): 
    无修饰符的普通location
    带=的精准匹配location
    带^~的非正则表达式location
  2.正则表达式location(regular expressions location):
    ~    区分大小写的正则location
    ~*   不区分大小写的正则location

Location基本匹配规则

匹配规则是指当请求到达nginx时,nginx如何决定该使用哪条location。

首先,nginx首先会检查所有的前缀location,从中选出 最长前缀匹配(也就是修饰符后面的路径最长的)的location并记下。

然后,如果存在正则location时,按照其出现的顺序,依次匹配URI,找到匹配的正则location就不再继续往下,并选择该location作为最终的结果。(划重点:正则location出现的顺序很重要)

Location特殊匹配规则1

如果最长前缀匹配location的修饰符是^~时,就不会检查正则location了,直接选择该location为最终location

Location特殊匹配规则2

如果存在精准匹配location,且请求的uri跟其 完全匹配,选择该精准匹配location作为最终的location

测试下自己的理解是否准确:

下面是一个location配置参考,以及不同的请求uri到达nginx时会执行的规则

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

请求URI                        执行的规则
/                             A
/index.html                   B
/documents/document.html      C
/images/1.gif                 D
/documents/1.jpg              E

参考文献:

[Nginx官网location解释][1]

你可能感兴趣的:(nginx,location)