转载:http://blog.csdn.net/xy2204/article/details/47749405

先来一张nginx模型图                                                   VS                                                  再来一张node模型图

location表达式类型

  • ~ 表示执行一个正则匹配,区分大小写
  • ~* 表示执行一个正则匹配,不区分大小写
  • ^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location。
  • = 进行普通字符精确匹配。也就是完全匹配。
  • @ 它定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

location优先级说明

在nginx的location和配置中location的顺序没有太大关系。正location表达式的类型有关。相同类型的表达式,字符串长的会优先匹配。

以下是按优先级排列说明:

  1. 等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。
  2. ^~类型表达式。一旦匹配成功,则不再查找其他匹配项。
  3. 正则表达式类型(~ ~*)的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
  4. 常规字符串匹配类型。按前缀匹配。

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 在配置中的优先级相关推荐

  1. 在nginx的正则配置中使用大括号花括号引起的问题解决

    在nginx的正则配置中使用大括号花括号引起的问题解决 问题现象 问题解决 示例 错误示例 正确示例 问题现象 大括号在nginx配置中经常用到,所以在正则表达里直接使用会导致格式错误. 问题解决 把 ...

  2. [转]简明 Nginx Location Url 配置笔记

    基本配置 为了探究nginx的url配置规则,当然需要安装nginx.我使用了vagrant创建了一个虚拟环境的ubuntu,通过apt-get安装nginx.这样就不会污染mac的软件环境.通过vr ...

  3. nginx location匹配优先级_一分钟搞清楚:Nginx之Location优先级

    Location表达式类型 ~ 表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 ^~ 表示普通字符匹配.使用前缀匹配.如果匹配成功,则不再匹配其他location = 进行 ...

  4. 关于Nginx location中配置proxy_pass转发时斜线'/'导致的404问题

    2019独角兽企业重金招聘Python工程师标准>>> 在Nginx location通用匹配规则中配置proxy_pass转发时,假设有如下location配置: location ...

  5. nginx配置中location匹配规则详解

    女主宣言 nginx作为一款性能优异的反向代理服务器,可以用于静态代理.负载均衡.限流等多种场景.那么,要灵活的使用nginx,必须清楚nginx配置文件的使用.本文作者对nginx的http块中的l ...

  6. 炎炎夏日,深夜详谈nginx的配置中location和rewrite的语法规则(从入门到高手的第六步)

    前言 在生产实际中,当用户页面请求后,很多是需要自动跳转到其他特定页面,这个时候往往可以利用nginx配置中location规则或rewrite语法进行设置. Nginx提供的全局变量或自己设置的变量 ...

  7. nginx location配置 - ttlsa教程系列之nginx

    为什么80%的码农都做不了架构师?>>>    今天讲下location的用法,部分内容是直接从网络上摘取的,这边做了一个整理,为了便于理解和学习,我这边做了一些例子. 语法规则: ...

  8. nginx location 匹配 多个规则_你需要知道的Nginx配置二三事

    Nginx是俄罗斯人Igor Sysoev基于C语言编写的十分轻量级的HTTP服务器,它主要有以下特点: 它是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器 ...

  9. nginx安装、nginx前端配置、后端配置、前后端分离配置、https支持(ssl配置)、负载均衡配置、nginx location详解

    nginx配置 一.nginx安装 二.nginx配置 仅前端配置 仅后端配置 前后分离配置(1) 前后分离配置(2) 前后不分离配置 https/ssl配置 负载均衡配置 数据压缩配置 三.完整ng ...

最新文章

  1. 独家 | 播客:入场券便是你的脸(附链接)
  2. 如何在ubuntu下安装detectron2_Anaconda中安装Cascade RCNN(Detectron)的若干问题
  3. MFC中CStatic控件动态改变
  4. ITK:两幅图像之差的绝对值
  5. Fibonacci Knapsack
  6. String转Double
  7. 围观电动车极端测试,是一种怎样的体验?
  8. ubuntu搭建NFS服务 磁盘共享 nfs 搭建
  9. dorado 刷新_dorado BDF常见问题
  10. 成功上岸,心得分享(计算机专业)
  11. CTC算法论文阅读笔记:Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurren
  12. MFC中TXT文件读写
  13. python爬虫(十三)selenium(Selenium入门、chromedriver、Phantomjs)
  14. 如何构建自己的云数据库?建立云数据库是否要收费?
  15. Windows命令行下对文件做MD5校验
  16. java pdf与ofd文件相互转换
  17. 隐马尔科夫模型模型:原理、实现
  18. [问题未处理]-kubernetes报错request canceled (Client.Timeout exceeded while awaiting headers)
  19. linux strcpy函数,C语言中函数strcpy ,strncpy ,strlcpy,strcpy_s的用法
  20. Linux发行商,能否齐步走?

热门文章

  1. 程序员面试系列——冒泡排序
  2. 初识contiki(2.7版本)
  3. JAVA Unsafe类
  4. docker安装logstash及logstash配置
  5. STM32开发 -- Systick定时器
  6. android开发 bug问题解决:Only the original thread that created a view hierarchy can touch its views
  7. 记录一次与大神们的关于GAN应用于NLP的讨论
  8. Android Binder 分析——通信模型
  9. bootstrap 开源框架demo_高大上的开源Springboot企业级用户权限系统
  10. JZOJ 5702. 【gdoi2018 day2】第二题 滑稽子图(subgraph)