java架构师培训:Nginx是怎样从HTTP请求中取出域名的

本文介绍了Nginx如何从HTTP请求中获取域名,以及在HTTP/1.0和HTTP/1.1协议中的不同处理方式。在HTTP/1.1中,Host头部成为确定域名的关键。Nginx使用server_name指令匹配域名,并确定默认server块的规则。匹配流程包括精确匹配、优先级选择和默认server处理。
摘要由CSDN通过智能技术生成

Nginx允许多个server{}块监听相同的端口,所以当访问相同端口、不同域名的请求到达时,还需要根据请求中的域名做第2次匹配,以决定最终关联的server{}块。
  java架构师培训

这里我们先要搞清楚域名是怎么从HTTP请求中取出来的。在HTTP/1.0协议中并没有Host头部,这是因为互联网起步时,HTTP的设计者并没有考虑到域名的数量会远多于服务器。对于HTTP/1.0请求而言,只能从absoluteURL中携带域名。
  举个例子,下面这个没有携带Host头部的请求可以取到www.taohui.pub域名:
  GEThttp://www.taohui.pub/index.htmlHTTP/1.
  互联网业务的推动导致一台服务器必须要处理大量域名,于是HTTP/1.1协议推出了描述访问域名的Host头部。对于不含有Host头部的HTTP/1.1请求,RFC规范要求服务器必须返回400错误码(Nginx也正是这么做的)。当Host头部与上述absoluteURL中的域名同时出现时,将会以后者为准。例如对于下面这个请求,Nginx会取出www.taohui.tech作为匹配域名:
  GEThttp://www.taohui.tech/index.htmlHTTP/1.0
  Host:www.taohui.pub
  另外,对于使用了TLS/SSL协议的HTTPS请求来说,还可以从TLS握手中获取到域名。关于TLS握手及相关插件我会在后续的文章中再详述。
  获取到请求的域名后,Nginx就会将其与上一节中listen指令匹配成功的server块进行第2次匹配,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值