• 对nginx中location的认识


    关于一些对location认识的误区

     

    1.location的匹配顺序是“先匹配正则,在匹配普通”。

       location的匹配顺序其实是“先匹配普通,在匹配正则”。造成误解的原因是:正则匹配会覆盖普通匹配

    2.location的执行逻辑跟location的编辑顺序无关

      a. “普通location”的匹配规则是“最大前缀”,因此“普通location”的确与编辑顺序无关;

    但是“正则location”的匹配规则是“顺序匹配”,且只要匹配到第一个就停止后面的匹配。

      b.“普通location ”与“正则 location ”之间的匹配顺序是,先匹配普通 location ,再“考虑”匹配正则 location 。

    注意这里的“考虑”是“可能”的意思,也就是说匹配完“普通 location ”后,有的时候需要继续匹配“正则 location ”,有的时

    候则不需要继续匹配“正则 location ”。

          两种情况下不需要继续匹配正则location:

          (1)当普通location的前面指定了“^~”,特别告诉nginx本条普通location一旦匹配上,则不需要继续匹配。

      (2)当普通location恰好严格匹配上,不是最大前缀匹配,则不再继续匹配正则

    总结:  “正则 location 匹配让步普通 location 的严格精确匹配结果;但覆盖普通 location 的最大前缀匹配结果”

    3.location的语法

    location [ = | ~ | ~* | ^~ | @]  /uri/ {...}

       根据不同前缀“=”,“~*”,“^~”,“@”和不带任何前缀,表达的含义不同

    总结:尽管location 的/uri/ 配置一样,但前缀不一样,表达指令含义不同。

    4.location前缀的详细说明

    主要分为两大类:正则location和普通location

    正则location  “~”和“~*”:

    “~”表示区分大小写;“~*”表示不区分大小写

    普通location  除了上面其余全是(包括没有前缀) “=”,“^~”,“@”

    “^~”中的“^”表示非,“~”表示正则,意思为不要继续匹配正则

    “=”也表示阻止正则location,和“^~”的区别为:“^~”依然遵守“最大前缀”匹配;而“=”必须是严格匹配。

    还有一种“隐含”的方式来阻止正则location 的搜索:当“最大前缀”匹配恰好就是一个“严格精确(exact match )”匹

    配,照样会停止后面的搜索。意思是:只要遇到“精确匹配exact match ”,即使普通location 没有带“= ”或“^~ ”前

    缀,也一样会终止后面的匹配。

    “@ ”是用来定义“Named Location ”的(可以理解为独立于“普通location”和“正则location”之外的第三种类型),这种“Named Location ”不是用来处理普通的HTTP 请求的,它

    是专门用来处理“内部重定向(internally redirected )”请求的。

    注意:这里说的“内部重定向(internally redirected )”是不需要跟浏览器交互的,纯粹是服务端的一个转发行为。

    5.location的匹配原则  最大前缀匹配

    例如:

    location /prefix/mid/ {} 和location /prefix/ {} ,

    对于HTTP 请求/prefix/mid/t.html ,前缀匹配的话两个location 都满足,选哪个?

    原则是:the most specific match ,于是选的是location /prefix/mid/ {} 。

    以上就是这次的全部内容!

  • 相关阅读:
    listview侧滑删除
    从相册获取图片及调用相机拍照获取图片,最后上传图片到服务器
    Volley框架设置sessionid
    Android Studio关于SVN的相关配置及从SVN检出项目
    Android的Message Pool是什么——源码角度分析
    Handler.sendMessage 与 Handler.obtainMessage.sendToTarget比较
    Android Studio调试方法学习笔记
    textview设置drawable
    浅析:点击父控件时,子控件中的textview自动进入选中状态
    spring整合mongo及调用
  • 原文地址:https://www.cnblogs.com/jingxiaoniu/p/7007653.html
Copyright © 2020-2023  润新知