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。html

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

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

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]
相关文章
相关标签/搜索