配置Nginx,不可避免的要用到location区块设置。以前使用都是直接上网找教程,不求甚解。现在想系统的了解一下Nginx,就从最常用的location指令入手。
location的语法:
location [ = | ~ | ~* | ^~ ] uri { ... //一些指令设置 } location @name { ... //一些指令 }
@语法定义一个命名规则,用于请求重定向。这里主要说一下第一种说法的规则以及匹配顺序。
-
=: 精确匹配
-
~: 正则匹配(区分大小写)
-
~*: 正则匹配(不区分大小写)
-
^~: 以常规字符串开头,不是正则匹配
总结:=,^~或者不写匹配常规字符串,~和~*进行正则匹配。
Nginx匹配uri的流程如下:
-
先进行常规字符串前缀匹配,再进行正则匹配。
-
对于常规匹配,如果 = (精确匹配)找到,则使用该location的规则,匹配中断。
-
常规前缀匹配时,找到最长前缀匹配并标记。例如: location /ABC {…} 和location /ABC/abc {…}两个规则存在,请求 /ABC/a.html 的最长匹配是 /ABC, 而 /ABC/abc.html的最长匹配是 /ABC/abc。注意,此时匹配并未结束。
-
如果最长匹配规则定义标识符是^~,使用该规则,匹配中断;否则往下进行正则匹配。
-
如果正则匹配规则找到,则使用该正则匹配规则;否则继续往下匹配正则规则,如无规则找到则使用最长匹配规则。
根据匹配流程,优先级依次为:location =, location 完整路径,location ^~, location ~(*)正则顺序, location 部分路径,/。
可以看到 / 请求的优先级最低。如果首页访问量大,可以设置规则 loation = / {…}加速处理。
参考文献
http://nginx.org/en/docs/http/ngx_http_core_module.html#location
原文链接:https://www.qiquanji.com/post/4717.html
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
微信扫码关注
更新实时通知