虚拟主机托管
许多人想要在Web上展现自己,但他们的网站流量都不大。对这些人来说,使用专用的Web服务器可能有点儿大材小用,因为他们每月花费数百美元租来的服务器大部分时间都是空闲的!
许多Web托管者通过让一些顾客共享一台计算机来提供便宜的Web主机托管服务。这称为共享主机托管或虚拟主机托管。每个网站看起来是托管在不同的服务器上,但实际上是托管在同一个物理服务器上。从最终用户的角度来看,被虚拟托管的网站应当和托管在专用服务器上的网站没什么区别。
当Joe和Mary刚开始商务运作时,他们可能会选择虚拟主机托管,以节省费用,直到他们网站的流量规模达到值得使用专用服务器的水平为止
1,通过IP地址进行虚拟主机托管
一个更常用的、更好的方法是通过IP地址进行虚拟化。每个虚拟网站都分配一个或多个唯一的IP地址。所有虚拟网站的IP地址都绑定到同一个共享的服务器上。服务器可以查询HTTP连接的目的IP地址,并以此来判断客户端的目标网站。
比方说,托管者把IP地址209.172.34.3分配给www.joes-hardware.com@@,把IP地址209.172.34.4分配给www.marys-antiques.com,把这两个IP地址都绑定到同一个物理服务器上。Web服务器就能使用目的IP地址来识别用户请求的是哪个虚拟站点了
2,通过Host首部进行虚拟主机托管
为了避免过度的地址消耗和虚拟IP地址的限制,我们希望在虚拟站点间共享同一个IP地址,且仍能区分站点。但正如我们看到的那样,因为大多数浏览器只是把URL的路径发给服务器,关键的虚拟主机名信息被其丢掉了。
为了解决这个问题,浏览器和服务器的实现者扩展了HTTP,把原始的主机名提供给服务器。不过,浏览器不能只发送完整的URL,因为这会使许多只能接收路径的服务器无法工作。替代的方法是,把主机名(和端口号)放在所有请求的Host扩展首部中传送。
客户端A和客户端B都发送了携带有要访问的原始主机名的Host首部。当服务器收到对/index.html的请求时,可以通过Host首部来判断要使用哪个资源。
Host首部描述了所请求的资源所在的因特网主机和端口号
让网站更可靠的方法
1,镜像的服务器集群
服务器集群是一排配置相同的Web服务器,互相可以替换。每个服务器上的内容可以通过镜像复制,这样当某个服务器出问题的时候,其他的可以顶上。
镜像Web服务器可以在不同的地点包含同样内容的副本。图18-7展示了4个镜像服务器,其中主服务器在芝加哥,复制服务器在纽约、迈阿密和小石城。主服务器为芝加哥地区的客户端服务,并肩负把内容传播给复制服务器的任务。
有以下两种方法把客户端的请求导向特定的服务器。
- · HTTP重定向。该内容的URL会解析到主服务器的IP地址,然后它会发送重定向到复制服务器。
- · DNS重定向。该内容的URL会解析到4个IP地址,DNS服务器可以选择发送给客户端的IP地址。
2,内容分发网络
简单地说,内容分发网络(CDN)就是对特定内容进行分发的专门网络。这个网络中的节点可以是Web服务器、反向代理或缓存。CDN中的反向代理缓存
复制原始服务器可以用反向代理(也称为替代物)缓存来代替。反向代理缓存可以像镜像服务器一样接受服务器请求。它们代表原始服务器中的一个特定集合来接收服务器请求。
反向代理和镜像服务器之间的区别在于反向代理通常是需求驱动的。它们不会保存原始服务器的全部内容副本,它们只保存客户端请求的那部分内容。内容在其高速缓存中的分布情况取决于它们收到的请求,原始服务器不负责更新它们的内容。为了更容易地访问“热点”内容(就是高请求率的内容),有些反向代理具有“预取”特性,可以在用户请求之前就从服务器上载入内容。
CDN中的代理缓存
代理缓存也可以部署在类似图18-6和图18-7的环境中。与反向代理不同,传统的代理缓存能收到发往任何Web服务器的请求。但是与反向代理比起来,代理缓存的内容一般都是按需驱动的,不能指望它是对原始服务器内容的精确复制。某些代理缓存也可以预先载入热点内容。
加速网站访问的另一种方法是对内容进行编码以便更快地传输。
WebDAV与协作写作
WebDAV(Web Distributed Authoring and Versioning,分布式写作与版本管理)为Web发布增添了新的内容——协作。WebDAV专注于对HTTP进行扩展,以提供协作写作的适宜平台。
WebDAV定义了一些新的HTTP方法并修改了其他一些HTTP方法的操作范围,新增的方法如下:
- PROPFIND获取资源的属性。
- PROPPATCH在一个或多个资源上设定一个或多个属性。
- MKCOL创建集合。
- COPY从指定的源端把资源或者资源集合复制到指定的目的地。目的地可以在另一台机器上。
- MOVE从指定的源端把资源或者资源集合移动到指定的目的地。目的地可以在另一台机器上。
- LOCK锁定一个或多个资源。
- UNLOCK把先前锁定的资源解锁。
