【Nginx】server的匹配顺序

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

server_namehost匹配优先级如下:

1、完全匹配

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

3、通配符在后的,如www.test.*

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

如果都不匹配

1、优先选择listen配置项后有defaultdefault_server

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

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

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

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

https://i-blog.csdnimg.cn/blog_migrate/bf35df5363b8e60c742974e31398d42e.png

接下来配置域名映射

vim /etc/hosts

https://i-blog.csdnimg.cn/blog_migrate/f11eccc3c1b76010c5ac958c4cdb26ea.png

访问测试:

https://i-blog.csdnimg.cn/blog_migrate/8260d74e8ac0f868defe81d5e06add0c.png

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

  1. 第二优先级:通配符在前

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

https://i-blog.csdnimg.cn/blog_migrate/02da5069d1e046598b0ea658d8e55b90.png

访问测试

https://i-blog.csdnimg.cn/blog_migrate/5c3744927b0f37ed82e98b1957bdbf6c.png

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

  1. 第三优先级:通配符在后

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

https://i-blog.csdnimg.cn/blog_migrate/2b7cb1084f3e39879145c500ebbc80a5.png

访问测试

https://i-blog.csdnimg.cn/blog_migrate/dcc9b0d1101618da4ea40a0371815dae.png

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

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

  1. listen配置项中default的影响

配置3server

https://i-blog.csdnimg.cn/blog_migrate/b560ecb375ed580338286a6273fb7fad.png

访问测试

https://i-blog.csdnimg.cn/blog_migrate/f1a7180e9dd5767f1885e63c9dcf890f.png

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

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

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

https://i-blog.csdnimg.cn/blog_migrate/857e6611c1677a7609e31d87e53fdbff.png

访问测试

https://i-blog.csdnimg.cn/blog_migrate/caf762038e47252caf43288ff12015c0.png

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

https://i-blog.csdnimg.cn/blog_migrate/baaad00b02f394851aa9b6d02475292d.png

  1. 验证没有匹配成功,且没有default的情况

2server

https://i-blog.csdnimg.cn/blog_migrate/b679bb3b929ca08549a7fd3e1b802bae.png

访问测试

https://i-blog.csdnimg.cn/blog_migrate/efa8211a27822fb4b24680cbd440c6a4.png

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

本文转载自:https://www.cnblogs.com/wangzhisdu/p/7839109.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值