nginx location 在配置中的优先级
转载:http://blog.csdn.net/xy2204/article/details/47749405
先来一张nginx模型图 VS 再来一张node模型图
location表达式类型
- ~ 表示执行一个正则匹配,区分大小写
- ~* 表示执行一个正则匹配,不区分大小写
- ^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location。
- = 进行普通字符精确匹配。也就是完全匹配。
- @ 它定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
location优先级说明
在nginx的location和配置中location的顺序没有太大关系。正location表达式的类型有关。相同类型的表达式,字符串长的会优先匹配。
以下是按优先级排列说明:
- 等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。
- ^~类型表达式。一旦匹配成功,则不再查找其他匹配项。
- 正则表达式类型(~ ~*)的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
- 常规字符串匹配类型。按前缀匹配。
location优先级示例
location = / {# 仅仅匹配请求 /[ configuration A ] } location / {# 匹配所有以 / 开头的请求。# 但是如果有更长的同类型的表达式,则选择更长的表达式。# 如果有正则表达式可以匹配,则优先匹配正则表达式。[ configuration B ] } location /documents/ {# 匹配所有以 /documents/ 开头的请求。# 但是如果有更长的同类型的表达式,则选择更长的表达式。# 如果有正则表达式可以匹配,则优先匹配正则表达式。[ configuration C ] } location ^~ /images/ {# 匹配所有以 /images/ 开头的表达式,如果匹配成功,则停止匹配查找。# 所以,即便有符合的正则表达式location,也不会被使用[ configuration D ] } location ~* \.(gif|jpg|jpeg)$ {# 匹配所有以 gif jpg jpeg结尾的请求。# 但是 以 /images/开头的请求,将使用 Configuration D[ configuration E ] }
请求匹配示例
/ -> configuration A
/index.html -> configuration B
/documents/document.html -> configuration C
/images/1.gif -> configuration D
/documents/1.jpg -> configuration E
注意,以上的匹配和在配置文件中定义的顺序无关。
1. location正则写法
一个示例:
location = / {# 精确匹配 / ,主机名后面不能带任何字符串[ configuration A ] } location / {# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求# 但是正则和最长字符串会优先匹配[ configuration B ] } location /documents/ {# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条[ configuration C ] } location ~ /documents/Abc {# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条[ configuration CC ] } location ^~ /images/ {# 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。[ configuration D ] } location ~* \.(gif|jpg|jpeg)$ {# 匹配所有以 gif,jpg或jpeg 结尾的请求# 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则[ configuration E ] } location /images/ {# 字符匹配到 /images/,继续往下,会发现 ^~ 存在[ configuration F ] } location /images/abc {# 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在# F与G的放置顺序是没有关系的[ configuration G ] } location ~ /images/abc/ {# 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用[ configuration H ] } location ~* /js/.*/\.js
- 已
=
开头表示精确匹配
如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。 ^~
开头表示uri以某个常规字符串开头,不是正则匹配- ~ 开头表示区分大小写的正则匹配;
- ~* 开头表示不区分大小写的正则匹配
- / 通用匹配, 如果没有其它匹配,任何请求都会匹配到
顺序不等于优先级:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
上面的匹配结果。按照上面的location写法,以下的匹配示例成立:
- / -> config A
精确完全匹配,即使/index.html也匹配不了 - /downloads/download.html -> config B
匹配B以后,往下没有任何匹配,采用B - /images/1.gif -> configuration D
匹配到F,往下匹配到D,停止往下 - /images/abc/def -> config D
最长匹配到G,往下匹配D,停止往下
你可以看到 任何以/images/开头的都会匹配到D并停止,FG写在这里是没有任何意义的,H是永远轮不到的,这里只是为了说明匹配顺序 - /documents/document.html -> config C
匹配到C,往下没有任何匹配,采用C - /documents/1.jpg -> configuration E
匹配到C,往下正则匹配到E - /documents/Abc.jpg -> config CC
最长匹配到C,往下正则顺序匹配到CC,不会往下到E
实际使用建议
所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {proxy_pass http://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {root /webroot/res/;
}
# 第三个规则就是通用规则,用来转发动态请求到后端应用服务器
# 非静态文件请求就默认是动态请求,自己根据实际把握
# 毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {proxy_pass http://tomcat:8080/
}
转载于:https://www.cnblogs.com/cangqiongbingchen/p/6728433.html
nginx location 在配置中的优先级相关推荐
- 在nginx的正则配置中使用大括号花括号引起的问题解决
在nginx的正则配置中使用大括号花括号引起的问题解决 问题现象 问题解决 示例 错误示例 正确示例 问题现象 大括号在nginx配置中经常用到,所以在正则表达里直接使用会导致格式错误. 问题解决 把 ...
- [转]简明 Nginx Location Url 配置笔记
基本配置 为了探究nginx的url配置规则,当然需要安装nginx.我使用了vagrant创建了一个虚拟环境的ubuntu,通过apt-get安装nginx.这样就不会污染mac的软件环境.通过vr ...
- nginx location匹配优先级_一分钟搞清楚:Nginx之Location优先级
Location表达式类型 ~ 表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 ^~ 表示普通字符匹配.使用前缀匹配.如果匹配成功,则不再匹配其他location = 进行 ...
- 关于Nginx location中配置proxy_pass转发时斜线'/'导致的404问题
2019独角兽企业重金招聘Python工程师标准>>> 在Nginx location通用匹配规则中配置proxy_pass转发时,假设有如下location配置: location ...
- nginx配置中location匹配规则详解
女主宣言 nginx作为一款性能优异的反向代理服务器,可以用于静态代理.负载均衡.限流等多种场景.那么,要灵活的使用nginx,必须清楚nginx配置文件的使用.本文作者对nginx的http块中的l ...
- 炎炎夏日,深夜详谈nginx的配置中location和rewrite的语法规则(从入门到高手的第六步)
前言 在生产实际中,当用户页面请求后,很多是需要自动跳转到其他特定页面,这个时候往往可以利用nginx配置中location规则或rewrite语法进行设置. Nginx提供的全局变量或自己设置的变量 ...
- nginx location配置 - ttlsa教程系列之nginx
为什么80%的码农都做不了架构师?>>> 今天讲下location的用法,部分内容是直接从网络上摘取的,这边做了一个整理,为了便于理解和学习,我这边做了一些例子. 语法规则: ...
- nginx location 匹配 多个规则_你需要知道的Nginx配置二三事
Nginx是俄罗斯人Igor Sysoev基于C语言编写的十分轻量级的HTTP服务器,它主要有以下特点: 它是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器 ...
- nginx安装、nginx前端配置、后端配置、前后端分离配置、https支持(ssl配置)、负载均衡配置、nginx location详解
nginx配置 一.nginx安装 二.nginx配置 仅前端配置 仅后端配置 前后分离配置(1) 前后分离配置(2) 前后不分离配置 https/ssl配置 负载均衡配置 数据压缩配置 三.完整ng ...
最新文章
- 独家 | 播客:入场券便是你的脸(附链接)
- 如何在ubuntu下安装detectron2_Anaconda中安装Cascade RCNN(Detectron)的若干问题
- MFC中CStatic控件动态改变
- ITK:两幅图像之差的绝对值
- Fibonacci Knapsack
- String转Double
- 围观电动车极端测试,是一种怎样的体验?
- ubuntu搭建NFS服务 磁盘共享 nfs 搭建
- dorado 刷新_dorado BDF常见问题
- 成功上岸,心得分享(计算机专业)
- CTC算法论文阅读笔记:Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurren
- MFC中TXT文件读写
- python爬虫(十三)selenium(Selenium入门、chromedriver、Phantomjs)
- 如何构建自己的云数据库?建立云数据库是否要收费?
- Windows命令行下对文件做MD5校验
- java pdf与ofd文件相互转换
- 隐马尔科夫模型模型:原理、实现
- [问题未处理]-kubernetes报错request canceled (Client.Timeout exceeded while awaiting headers)
- linux strcpy函数,C语言中函数strcpy ,strncpy ,strlcpy,strcpy_s的用法
- Linux发行商,能否齐步走?
热门文章
- 程序员面试系列——冒泡排序
- 初识contiki(2.7版本)
- JAVA Unsafe类
- docker安装logstash及logstash配置
- STM32开发 -- Systick定时器
- android开发 bug问题解决:Only the original thread that created a view hierarchy can touch its views
- 记录一次与大神们的关于GAN应用于NLP的讨论
- Android Binder 分析——通信模型
- bootstrap 开源框架demo_高大上的开源Springboot企业级用户权限系统
- JZOJ 5702. 【gdoi2018 day2】第二题 滑稽子图(subgraph)