在开始处理一个http请求时,nginx会取出header头中的host,与nginx.conf中每个server的server_name进行匹配,以此决定到底由哪一个server块来处理这个请求。

server_name与host匹配优先级如下:

  • 1、完全匹配

  • 2、通配符在前的,如*.test.com

  • 3、在后的,如www.test.*

  • 4、正则匹配,如~^.www.test.com$

如果都不匹配

  • 1、优先选择listen配置项后有default或default_server的

  • 2、找到匹配listen端口的第一个server块

空口无凭,验证一下:

1、最高优先级:完全匹配

首先,在nginx.conf中创建2个server,1个完全匹配,1个通配符匹配

通配符server放在最前,以证明完全匹配的优先级与配置顺序无关

接下来配置域名映射

vim /etv/hosts

访问测试:

结论:完全匹配的优先级高于通配符匹配

2、第二优先级:通配符在前

修改server配置,还是2个server,通配符在后的server放到前面,同样是为了消除配置顺序给测试带来的影响

访问测试

结论:通配符在前的优先级高于在后的

3、第三优先级:通配符在后

修改server配置,还是2个server,通配符在后的server放到前面,同样是为了消除配置顺序给测试带来的影响

访问测试

结论:通配符在后的优先级高于正则匹配的server

到此,第一部分的匹配规则已经验证完毕。接下来验证都不匹配的情况

4、listen配置项中default的影响

配置3个server

访问测试

结论:正则匹配虽然优先级较低,但是仍然高于default;在都匹配不到的情况下,default开始起作用。

5、验证default的作用域,default在匹配成功的情况下是否会影响优先级

2个server,给优先级低的server配置default属性

访问测试

结论:default只能作用于匹配不到的情况下,而且nginx.conf不可以配多个default,否则nginx重启时候会提示错误

6、验证没有匹配成功,且没有default的情况

2个server

访问测试

结论:在server_name都匹配失败的前提下,并且listen没有default属性,那么端口号和server的顺序将发挥作用,它会去找端口匹配的位置最靠前的server。

最终的结论就是开头的这段话:

  • 1、完全匹配

  • 2、通配符在前的,如*.test.com

  • 3、在后的,如www.test.*

  • 4、正则匹配,如~^.www.test.com$

如果都不匹配

  • 1、优先选择listen配置项后有default或default_server的

  • 2、找到匹配listen端口的第一个server块

图文解说nginx中server的匹配顺序相关推荐

  1. web服务之Nginx中的location匹配与rewrite重写跳转

    文章目录 常见的Nginx正则表达式 location location分为三类 location常用的匹配规则 location 优先级 location 示例说明 三个匹配规则定义 rewrite ...

  2. 图文解说:Nginx+tomcat配置集群负载均衡

    图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用  作者:niumd Blog:http://ari.iteye ...

  3. 在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解

    看了很多nginx的配置,好像都忽略了ip直接访问web的问题,不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面. 官方文档中提供的方法: If you d ...

  4. 必学必会的nginx配置location匹配顺序总结

    location 匹配规则: location 路径正则匹配: 符号 说明 ~ 正则匹配,区分大小写 ~* 正则匹配,不区分大小写 ^~ 普通字符匹配,如果该选项匹配,则,只匹配该选项,不再向下匹配其 ...

  5. nginx配置location匹配顺序总结

    location匹配顺序 "="前缀指令匹配,如果匹配成功,则停止其他匹配 普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配) ...

  6. php中继承过来的类初始化顺序,java_图文详解Java中class的初始化顺序,class的装载 在讲class的初始化 - phpStudy...

    图文详解Java中class的初始化顺序 class的装载 在讲class的初始化之前,我们来讲解下class的装载顺序. 以下摘自<Thinking in Java 4> 由于Java ...

  7. 整理:sql server 中sql语句执行顺序

    原文地址为: 整理:sql server 中sql语句执行顺序 SQL Server 查询处理中的各个阶段(SQL执行顺序) SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中 ...

  8. VS2013和VS2015中MVC 区域路由匹配顺序相反

    创建测试工程 分别在vs2013和vs2015中创建mvc项目,并创建First.Second.Three三个Area,每个Area下面创建一个HomeController和Index视图.修改Rou ...

  9. Nginx 设置,设置已经解析的域名,在nginx中没有定义相应server时的默认访问

    场景介绍: 因为业务需求,我们需要对域名进行解析,这里我对域名进行了如下解析 但是,因为业务需求,我可能在nginx中只定义了kuman.xiaobudiu.top 和 www.xiaobudiu.t ...

最新文章

  1. redis入门(03)redis的配置
  2. 一卡顶四卡,清华推出工具包BMInf玩转百亿大模型
  3. PL/SQL复合变量
  4. 微软算法100题26 左旋转字符串
  5. 代码优化 5 大原则,第一条就是别优化了!!!
  6. Python3学习笔记(六):字符串
  7. jupyter 方框 汉字,jupyter画图中文显示乱码问题解决办法
  8. vue报错 TypeError: merge is not a function
  9. Oracle视图添加约束,Oracle创建视图的语法
  10. 编程 mcq_MCQ | 8255 PPI(可编程外围接口)
  11. 江淮汽车涉嫌排放造假 罚款1.7亿
  12. 阿迪达斯asp.net sql购物商城计算机设计网站作品
  13. sql语句中【模糊查询like的使用】
  14. Cloud Native Infrastructures Meetup 精彩回顾(内含 PPT 下载)
  15. 87-非阻塞 connect
  16. php ci 优化,CodeIgniter 性能优化
  17. 专硕计算机考研英语一还是二,学硕只会考英语一?专硕只会考英语二?
  18. H5+ 常用API(拨打电话,设备震动,屏幕方向,屏幕亮度,设备信息...等)
  19. 아프리카 BJ 박현서,
  20. c# 改键-之魔兽改键(Hook)

热门文章

  1. Kraken:使用精确比对的超快速宏基因组序列分类软件
  2. 湖南中医药大学计算机刘伟老师,喜讯 | 湖南中医药大学在全省高校教师课堂教学竞赛中喜获佳绩...
  3. R语言gganimate包创建可视化gif动图、并使用anim_save函数保存可视化gif动图(gganimate export to gif)
  4. R语言ggplot2可视化自定义图例(legend)方框(box):所有图例没有方框、每个图例分别在不同的方框中、多个图例放置在同一个方框中
  5. vim+快捷键+常用+命令
  6. RNA-seq中的生物学重复
  7. Android Studio窗口组成
  8. PacBio But Not Illumina Technology Can Achieve Fast, Accurate and Complete Closure of the High GC, C
  9. PacBio Sequencing and Its Applications PacBio测序及其应用
  10. Type Ⅰ error(false positive) Type Ⅱ error(false negative)