Web 主机托管

本章主要介绍了关于在一台物理服务器上托管了很多的主机(也就是说一个电脑里面部署了两个或者更多网站),此时,客户端怎么样和服务器端沟通,才能无差错地访问对应资源的主机(用户1访问a网站的资源,那么就不能跑到b网站上获取资源)。以及介绍了一些服务器集群的概念!

相关概念

  • Web主机托管:对内容资源的存储、协调以及管理的职责统称为Web主机托管。主机托管是服务器的主要功能之一。
  • 托管者:如果某个公司想建立一个网站,但不想自行管理服务器所需的软硬件,就需要主机托管服务,即托管者。

主机托管服务

  • 专用托管:一台物理服务器对应一个主机
  • 虚拟主机托管:许多Web托管者通过让一些顾客共享一台计算机来提供便宜的Web主机托管服务,这称为共享主机托管或虚拟主机托管。每个网站看起来是托管在不同的服务器上,但实际上是托管在同一个物理服务器上。但这并不意味着上千个网站是用一台PC机来提供服务的。托管者可以创建成排同样的服务器,称为服务器集群。

虚拟服务器请求缺乏主机信息

  • 背景:不幸的是,HTTP/1.0中的一个设计缺陷会使虚拟主机托管者抓狂。HTTP/1.0规范中没有为共享的Web服务器提供任何方法来设别要访问的是哪一个托管的网站。
  • 造成的后果:如果在一台物理服务器上托管了两个网站www.site1.com和www.site2.com。用户1想去获取www.site1.com的主页,于是在它发送了的请求报文为请求行GET /index.html HTTP/1.0,这里并没有发送主机信息,所以很可能服务器返回的是www.site2.com的主页。

设法让虚拟主机托管正常工作

为了解决HTTP/1.0无法提供主机设别的缺陷,Web托管者需要开发变通的方案和约定来支持共享的虚拟主机托管。主要有四种技术:

  • 通过URL路径进行虚拟主机托管: 可以通过分配不同的URL路径,用这种笨方法把共享服务器上的虚拟站点隔离开。
    • 例如,可以给每个逻辑网站一个专门的路径前缀。
      Joe的五金商店可以是:http://www.joes-hardware.com/joe/index.html
      Mary的古董拍卖店可以是:http://www.marys-antiques.com/mary/index.html
      
    • 当请求到达服务器时,其中并没有主机名信息,但服务器可以通过路径来区分它们。
      请求Joe的五金商店的网址是 GET /joe/index.html
      请求Mary的古董拍卖店的网址是 GET /mary/index.html
      
    • 显然这不是一个好方法,/joe和/mary这样的前缀是多余的,并且那种常规输入主机地址显示主页的约定不存在了!
  • 通过端口号进行虚拟主机进行托管: 托管者为每个主机提供一个单独的端口号,用来区分每个网站。这个方法也有同样的显著问题,因为终端用户很少去输入端口号的。
  • 通过IP地址进行虚拟主机托管: 一个更常用的、更好的方法是通过IP地址进行虚拟化。每个虚拟网站都分配一个或多个唯一的IP地址。所有虚拟网站的IP地址都绑定到同一个共享的服务器上。服务器可以查询HTTP连接的目的IP地址,并以此来判断客户端的目标网扎。这种方法对大的托管者来说,虚拟IP的主机托管能够工作,但它会带来一些麻烦。
    • ip地址是有限制的,服务器上托管成百上千的虚拟站点的服务商不一定能实现愿望。
    • IP地址是稀缺资源。
    • 服务器通过赋值服务器来增加容量时,ip地址短缺的问题就更严重了。
  • 通过Host首部进行虚拟主机托管: 这个方法主要是在请求首部增加Host首部,用来发送目的主机信息和端口。

解释Host首部

  • 如果HTTP请求报文中的URL是绝对的(也就是说,包含方案和主机部分),就忽略Host首部的值。
  • 如果HTTP请求报文中的URL没有主机部分,而该请求带有Host首部,则主机/端口的值就从Host首部中取。
  • 如果通过以上两步都无法获得有效的主机,就向客户端返回400 Bad Request响应。

使网站更可靠

出现下列情况,网站是服务运作的。

  • 服务器宕机
  • 交通拥塞:服务器过载,甚至使它彻底停机
  • 网络中断或掉线

常见解决办法:

  • 镜像的服务器集群,涉及的技术:HTTP重定向:该内容的URL会解析到主服务器的ip地址,然后它会发送重定向到复制服务器。DNS重定向:该内容的URL会解析到四个IP地址,DNS服务器可以选择发送给客户端的IP地址。
  • 内容分发网络
下一节:本章主要介绍了网站重定向和负载均衡的一些技术,术语网站架构方面的知识!