在项目开发中常常会遇到nginx配置文件中,会有不少条location配置,却读不懂其中的含义而烦恼
Location是Nginx中的块级指令(block directive),
经过配置Location指令块,能够决定客户端发过来的请求URI如何处理(是映射到本地文件仍是转发出去)及被哪一个location处理
修饰符(modifier) location [ = | ~ | ~* | ^~ ] uri { ... } location根据不一样的修饰符能够分为两大类 1. 前缀location(prefix location): 无修饰符的普通location 带=的精准匹配location 带^~的非正则表达式location 2.正则表达式location(regular expressions location): ~ 区分大小写的正则location ~* 不区分大小写的正则location
匹配规则是指当请求到达nginx时,nginx如何决定该使用哪条location。html
首先,nginx首先会检查全部的前缀location,从中选出 最长前缀匹配(也就是修饰符后面的路径最长的)的location并记下。而后,若是存在正则location时,按照其出现的顺序,依次匹配URI,找到匹配的正则location就再也不继续往下,并选择该location做为最终的结果。(划重点:正则location出现的顺序很重要)nginx
若是最长前缀匹配location的修饰符是^~时,就不会检查正则location了,直接选择该location为最终location
若是存在精准匹配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]