关于一些对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/ {} 。

对nginx中location的认识的更多相关文章

  1. nginx 中location和root

    nginx 中location和root,你确定真的明白他们关系? 2016-01-17 14:48 3774人阅读 评论(1) 收藏 举报  分类: linux(17)  版权声明:本文为博主原创文 ...

  2. Nginx 中 location 的匹配顺序

    nginx中location的匹配模式有以下几种: 精确匹配:以=开头,只有完全匹配才能生效,例子location = /uri 非正则匹配:以^~开头,^表示非.~表示正则,例子location ^ ...

  3. Nginx中location配置[转]

    关于一些对location认识的误区 1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我 ...

  4. nginx中location匹配顺序

    一.location语法 语法: Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: - ...

  5. nginx中location、rewrite用法总结

    一.location用法总结 location可以把不同方式的请求,定位到不同的处理方式上. 1.location的用法 location ~* /js/.*/\.js 以 = 开头,表示精确匹配:如 ...

  6. nginx中location详解

    Location block 的基本语法形式是: location [=|~|~*|^~|@] pattern { ... } [=|~|~*|^~|@] 被称作 location modifier ...

  7. nginx 中location和root、alias

    nginx指定文件路径有两种方式root和alias,这两者的用法区别 root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件 ...

  8. nginx 中location和root,你确定真的明白他们关系?

    最近公司开发新项目,web server使用nginx,趁周末小小的研究了一下,一不小心踩了个坑吧,一直404 not found!!!!!当时卡在location和root中,但是网上却比较少聊这方 ...

  9. nginx中location的顺序(优先级)及rewrite规则写法

    一.location正则写法 一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所 ...

随机推荐

  1. [leetcode]50. Pow(x, n)求幂

    Implement pow(x, n), which calculates x raised to the power n (xn). Example 1: Input: 2.00000, 10 Ou ...

  2. stark组件开发之添加功能实现

    添加功能,还是使用, form 组件来完成!  并且 完成添加之后,需要保留原搜索条件. def memory_url(self): '''用于反向生成url, 并且携带,get请求的参数,跳转到下一 ...

  3. python 2与python3 区别

    源码区别 python3:python2 a) py3 优美简单清晰. b) py2:源码重复,混乱,不规范,冗(rong)余(不需要特多,啰嗦). test a)    py3:可以中文也可以英文( ...

  4. [费用流][BZOJ1070]修车

    修车 题目描述 同一时刻有位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均 ...

  5. 查看windows上次开机时间

    首先在电脑上找的[计算机]图标,点击鼠标右键弹出下拉菜单,在下拉菜单里找到[管理]选项 点击下拉菜单里的[管理]选项,弹出计算机管理界面,在左侧菜单栏里的系统工具里可以看到[事件查看器]菜单 点击[时 ...

  6. XML文件的DTD编写

    <?xml version="1.0" encoding="UTF-8" ?> <!--DTD外部引用:--> <!DOCTYPE ...

  7. OKR 与 KPI

    作者:Cat Chen链接:https://www.zhihu.com/question/22478049/answer/23833548来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  8. MVC+EF(CODEFIRST)+EASYUI医药MIS系统

    https://www.cnblogs.com/chenlinzhi/p/4332628.html

  9. ssh 绕过The authenticity of host '*.*.*.*' can't be established 直接输入密码

    只需要使用命令 ssh webgate@10.129.6.237 -o "StrictHostKeyChecking no" 即可以绕过 insp_ap@inspect02:/ho ...

  10. HTML学习总结(作业五)

    1:HTML简介 超文本标记语言,标准通用标记语言下的一个应用.是 网页制作必备的编程语言“超文本”就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素.超文本标记语言的结构包括“头”部分(英语 ...