对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/ {} 。
对nginx中location的认识的更多相关文章
- nginx 中location和root
nginx 中location和root,你确定真的明白他们关系? 2016-01-17 14:48 3774人阅读 评论(1) 收藏 举报 分类: linux(17) 版权声明:本文为博主原创文 ...
- Nginx 中 location 的匹配顺序
nginx中location的匹配模式有以下几种: 精确匹配:以=开头,只有完全匹配才能生效,例子location = /uri 非正则匹配:以^~开头,^表示非.~表示正则,例子location ^ ...
- Nginx中location配置[转]
关于一些对location认识的误区 1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我 ...
- nginx中location匹配顺序
一.location语法 语法: Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: - ...
- nginx中location、rewrite用法总结
一.location用法总结 location可以把不同方式的请求,定位到不同的处理方式上. 1.location的用法 location ~* /js/.*/\.js 以 = 开头,表示精确匹配:如 ...
- nginx中location详解
Location block 的基本语法形式是: location [=|~|~*|^~|@] pattern { ... } [=|~|~*|^~|@] 被称作 location modifier ...
- nginx 中location和root、alias
nginx指定文件路径有两种方式root和alias,这两者的用法区别 root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件 ...
- nginx 中location和root,你确定真的明白他们关系?
最近公司开发新项目,web server使用nginx,趁周末小小的研究了一下,一不小心踩了个坑吧,一直404 not found!!!!!当时卡在location和root中,但是网上却比较少聊这方 ...
- nginx中location的顺序(优先级)及rewrite规则写法
一.location正则写法 一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所 ...
随机推荐
- 【python-dict】dict的使用及实现原理
以下内容是针对:python源码剖析中的第五章——python中Dict对象 的读书笔记(针对书中讲到的内容进行了自己的整理,并且针对部分内容根据自己的需求进行了扩展) 一.Dict的用法 Dict的 ...
- VUE项目小试牛刀
首先安装webstorm:http://www.jetbrains.com/webstorm/ (推荐) 再安装node.js:https://nodejs.org/en/download/ (必 ...
- Ubuntu部署可视化爬虫Portia2.0环境以及入门
http://www.cnblogs.com/kfpa/p/Portia.html http://brucedone.com/archives/986
- Java代码获取spring 容器的bean几种方式
一.目的 写了一个项目,多个module,然后想在A模块中实现固定的config注入,当B模块引用A时候,能够直接填写相对应的配置信息就行了.但是遇到一个问题,B引用A时候,A的配置信息总是填充不了, ...
- centos7 编译安装nginx+tcp转发
一.依赖 1. gcc 安装安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装: yum install gcc-c++ 2. PCRE pc ...
- 基于OpenCV的图书扫描识别程序开发
1.AndroidStudio环境配置 https://www.cnblogs.com/little-monkey/p/7162340.html
- sshpass 使用方法
首先下载sshpass并且安装 $ tar -zxvf sshpass-1.06.tar.gz $ cd sshpass-1.06 $ ./configure --prefix=/usr/local/ ...
- [ 9.24 ]CF每日一题系列—— 468A构造递推
Description: 1 - n个数问你能否经过加减乘除这些运算n -1次的操作得到24 Solutrion: 一开始想暴力递推,发现n的范围太大直接否决,也否决了我的跑dfs,后来就像肯定有个递 ...
- 理解Time-Wait
What is it? TIME-WAIT状态的主要作用在于TCP连接的拆除阶段.拆除一个TCP连接通常需要交换4个segment,如下图所示: Host1上的应用程序关闭了自己这一端的连接,使得TC ...
- ReactNative学习笔记(五)踩坑总结
已经发现的bug或者问题 Android不支持shadow属性: Animated.Image的borderRadius不生效: setNativeProps无法修改图片的source: 没有直接设置 ...