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块

 

转载于:https://www.cnblogs.com/wangzhisdu/p/7839109.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以得出以下关于nginx配置网站的server部分的信息: 在nginx配置server块用于定义一个虚拟主机。每个server块包含了一组指令,用于配置该虚拟主机的行为。在server,可以使用listen指令指定监听的端口号,使用server_name指令指定虚拟主机的域名或IP地址。 引用\[1\]的示例展示了一个server块的配置示例。其,listen指令指定了监听的端口号为80,server_name指令指定了虚拟主机的域名为localhost。在location块,配置了对路径/abc的处理,使用return指令返回了一个状态码200和响应内容"access success"。 引用\[2\]提到了nginx在搜索匹配location的时候的匹配顺序。首先使用不包含正则表达式的location进行匹配,找到一个匹配度最高的location,然后再使用包含正则表达式的location进行匹配。如果能直接访问,则匹配成功,否则使用之前匹配度最高的location来处理请求。 引用\[3\]介绍了server_name指令可以使用正则表达式进行匹配的方式。使用~作为正则表达式字符串的开始标记,可以使用正则表达式进行更灵活的匹配。 综上所述,nginx配置网站的server部分可以根据需求使用listen指令指定监听的端口号和server_name指令指定虚拟主机的域名或IP地址。在server,可以使用location块配置对不同路径的处理方式,可以使用正则表达式进行更灵活的匹配。 #### 引用[.reference_title] - *1* *2* *3* [Nginx--server块配置](https://blog.csdn.net/qq_46645840/article/details/126125047)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值