nginx中server的匹配顺序
在开始处理⼀个http请求时,nginx会取出header头中的host,与f中每个server的server_name进⾏匹配,以此决定到底由哪⼀个server块来处理这个请求。
server_name与host匹配优先级如下:
1、完全匹配
2、通配符在前的,如*.test
3、在后的,如
4、正则匹配,如~^\.www\.test\$
如果都不匹配
1、优先选择listen配置项后有default或default_server的
2、到匹配listen端⼝的第⼀个server块
空⼝⽆凭,验证⼀下:
1、最⾼优先级:完全匹配
⾸先,在f中创建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只能作⽤于匹配不到的情况下,⽽且f不可以配多个default,否则nginx重启时候会提⽰错误
6、验证没有匹配成功,且没有default的情况
2个server
访问测试
结论:在server_name都匹配失败的前提下,并且listen没有default属性,那么端⼝号和server的顺序将发挥作⽤,它会去端⼝匹配的位置最靠前的server。
最终的结论就是开头的这段话:
1、完全匹配
2、通配符在前的,如*.test
3、在后的,如
4、正则匹配,如~^\.www\.test\$
如果都不匹配
1、优先选择listen配置项后有default或default_server的
2、到匹配listen端⼝的第⼀个server块
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论