nginx 中的location

看到一篇好的文章, 收到启发, 在原作者的文章中摘抄一部分总结出来, 在这里感谢原作
关于一些对location认识的误区

访问nginx: 首先要匹配location中的uri 规则, 匹配上后, 然后再将root指定的根目录,拼接上location 上的路径, 再拼接上该目录下的文件, 
这才是最终访问的路径, 目前不知道为什么是这样做, 理解不了, 只能先记住 
location [=|~|~*|^~|@] /uri/ { … }  分为两种location: 正则location 和 普通location
一: 正则location: “~ ”和“~* ”前缀表示正则location, “~ ”区分大小写,“~* ”不区分大小写;
二: 普通location: 其他前缀(包括:“=”,“^~ ”和“@ ”)和无任何前缀的都属于普通location 。

普通location 和 正则location 匹配规则是:先匹配普通location (再匹配正则表达式)
普通location 之间匹配规则 --> 最大前缀匹配
例如:location /prefix/mid/ {} 和 location /prefix/ {} , 对于HTTP 请求/prefix/mid/t.html ,(首先看是两个普通location比较,所以是最大前缀匹配规则;) 
前缀匹配的话两个location 都满足,选哪个?原则是:the most specific match ,于是选的是location /prefix/mid/ {} )。

“正则location ”与“正则location”内部的匹配规则是:
按照正则location 在配置文件中的物理顺序(编辑顺序)匹配的,并且只要匹配到一条正则location ,就不再考虑后面的

“普通location ”的最大前缀匹配结果与继续搜索的“正则location ”匹配结果的决策关系。
如果继续搜索的“正则location ”也有匹配上的,那么“正则location ”覆盖 “普通location ”的最大前缀匹配

通常的规则是,匹配完了“普通location ”指令,还需要继续匹配“正则location ”,但是你也可以告诉Nginx :
匹配到了“普通location ”后,不再需要继续匹配“正则location ”了,要做到这一点只要在“普通location ”前面加上“^~ ”符号(^ 表示“非”,~ 表示“正则”,字符意思是:不要继续匹配正则)。
“^~ ”和“= ”都能阻止继续搜索正则location 的话,区别: 
共同点是它们都能阻止继续搜索正则location ,不同点是“^~ ”依然遵守“最大前缀”匹配规则,然而“= ”不是“最大前缀”,而是必须是严格匹配(exact match )。

下面通过很多的例子讲解location
“location / {} ”和“location = / {} ”的区别

“location / {} ”: 是普通location , 遵循最大前缀匹配, 如果后面还有正则匹配, 如果正则匹配到了,正则匹配就会覆盖此配置; 
“location = / {} ”: 用的是"="号, 是精确匹配, 只能匹配到  http://host:port/ 请求;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值