http请求头中host字段和nginx配置中的server_name指令有什么关系?

http请求中的host字段可能很少有人注意到, 即使注意到也知道他实际用处可能也不多. 今儿咱们就来说说这个host, 我相信这会颠覆很多人之前的认识.
假设有个nginx配置如下:

server {
    listen      80;
    server_name www.a.com;
    return 200 '这是第一块server';
}
server {
    listen      80;
    server_name www.b.com;
    return 200 '这是第二块server';
}

此时我们请求http://www.a.com, 这是大家熟悉的,会由第一块server处理.
而在上面基础上在请求时在请求头指定host: www.b.com ; 此时的结果会很出乎许多人的意外.该请求就会由第二块server处理.
你可能会纳闷为什么nginx没按照请求的地址 http://www.a.com走?  这就需要看下nginx处理机制.

经过查阅官网.原来,nginx处理一个请求时,决定由哪个server块处理请求是根据请求头中host字段来判断,和请求网址的域名并没有关系(只是当我们发起请求时,没有特意指定该host字段时, 请求客户端会自动帮我们计算,一般就是域名.). 此外值得留意的,如果请求头的host在nginx配置都不到一个对应server块, 那就是按照由于默认server块处理, 如果没有明确指定default server, 那么第一个server就是默认的. 更多的细节可见官网如下链接

我的博客: https://blog.nice100.net/default/77.html

 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值