本章主要介绍了关于在一台物理服务器上托管了很多的主机(也就是说一个电脑里面部署了两个或者更多网站),此时,客户端怎么样和服务器端沟通,才能无差错地访问对应资源的主机(用户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地址。
- 内容分发网络
下一节:本章主要介绍了网站重定向和负载均衡的一些技术,术语网站架构方面的知识!