zoukankan      html  css  js  c++  java
  • nginx server_name匹配顺序

    先叙述一下环境。

    服务器Nginx上面配置了多个域名,其中域名是分散放在多个目录下,按业务来划分的,然后再 nginx.conf 中国通过include来引用。

    最近新增一个业务,只 listen 80;不配置server_name,计划是让没有匹配到server_name的域名,通过此项配置来访问到后端的应用。该域名单独创建一个目录,并通过include配置到nginx.conf中,由于有多个include,新增的默认加到最后面。

    想法很好,然而在测试的过程中发现了新的问题。访问某个不匹配的域名是,发现地址被强跳到了https,反复检查了新增的域名配置,并没有rewrite的操作,nginx.conf 也无异常。最后发现是include引用顺序的问题。第一个include中,某些server块中含有rewrite的配置。

    可见,在寻找server_name的过程中,发现没有匹配到任何一个server_name,然后就默认走第一个server块,其中有rewrite的配置,因此出现了强跳https的情况。

    在开始处理一个http请求时,nginx会取出header头中的host,与配置文件中每个server的server_name进行匹配,以此决定到底由哪一个server块来处理这个请求。如果server_name 匹配失败,并且listen没有default属性,那么端口号和server的顺序将发挥作用,它会去找端口匹配的位置最靠前的server块。

    最后说一下匹配顺序:

    • 1、完全匹配
    • 2、通配符在前的,如*.test.com
    • 3、通配在后的,如www.test.*
    • 4、正则匹配,如~^.www.test.com$

    如果都不匹配:

    • 1、优先选择listen配置项后有default或default_server的
    • 2、如果没有配default或者default_server,则找到匹配listen端口的第一个server块
  • 相关阅读:
    c++-面向对象:类和对象
    c++-内联函数和函数重载和默认参数和函数指针
    c++-引用
    c++-const
    c++--语言本身
    排序-基数排序
    排序-归并排序
    排序-堆排序
    常用Java API: ArrayList(Vector) 和 LinkedList
    常用Java API:Calendar日期类
  • 原文地址:https://www.cnblogs.com/cptao/p/13491445.html
Copyright © 2011-2022 走看看