场景:
在项目开发中经常会遇到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]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。