zoukankan      html  css  js  c++  java
  • nginx中server的匹配顺序

    转载:

    在开始处理一个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块
  • 相关阅读:
    sublime text3快速编辑选中多行
    sublime text3实现多行快速编辑Ctrl+E或者Tab
    WPF集合控件实现分隔符(ItemsControl Separator)
    WPF的ListView控件自定义布局用法实例
    ASP.NET MVC4+BootStrap 实战(一)
    wpf 获取datagrid 模板列中的控件
    WPF之DataGrid篇:DataGridComboBoxColumn
    WPF DataGrid 样式分享
    WPF之DataTemplateSelector技巧
    【WPF】ComboBox:根据绑定选取、设置固定集合中的值
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/9080959.html
Copyright © 2011-2022 走看看