|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
摘要: 本文介绍了WWW服务器的虚拟主机的工作原理,讨论了在Apache WWW服务器下的各种虚拟主机、尤其是大规模虚拟主机的设置技术,并比较了各种方法的特点。 要害词:Apache WWW Virtual Hosting 虚拟主机 一、WWW服务器虚拟主机原理 WWW服务器虚拟主机是指使用一台物理机器,充当多个主机名的WWW服务器。比如由一台机器同时提供http://www.company1.com, http://www.company2.com 等的WWW服务,而浏览这些WWW站点的用户感觉不到这种方法下跟由不同的机器提供不同的服务有什么差别。 使用WWW虚拟主机的好处在于,一些小规模的网站,通过跟其他网站共享同一台物理机器,可以减少系统的运行成本,并且可以减少治理的难度。另外,对于个人用户,也可以使用这种虚拟主机方法来建立有自己独立域名的WWW服务器,目前海内有很多公司都提供这种免费的服务。 WWW虚拟主机有两种工作方法: 1.1 基于IP地址的虚拟主机方法 这种方法下,不同的主机名解析到不同的IP地址,提供虚拟主机服务的机器上同时设置有这些IP地址。服务器根据用户哀求的目的IP地址来判断用户哀求的是哪个虚拟主机的服务,从而进一步的处理。 缺点:基于IP地址的虚拟主机方法需要在提供虚拟主机服务的机器上设立多个IP地址,既浪费了IP地址,又限制了一台机器所能容纳的虚拟主机数目。因此这种方法越来越少使用。但是,这种方法是早期使用的HTTP 1.0协议唯一支持的虚拟主机方法。 1.2 基于主机名的虚拟主机方法 由于基于IP地址的虚拟主机方法有如上的缺点,HTTP 1.1协议中增加了对基于主机名的虚拟主机的支持。详细说,当客户程序向WWW服务器发出哀求时,客户想要访问的主机名也通过哀求头中的“Host:”语句传递给WWW服务器。比如,www.company1.com, www.company2.com 都对应于同一个IP地址(即由同一台机器来给这两个虚拟域名提供服务),客户程序要存取http://www.company1.com/index.html时,发出的哀求头中包含有如下的内容: GET /index.html HTTP/1.1 Host: www.company1.com ….. WWW服务器程序接收到这个哀求后,可以通过检查“Host:”语句,来判断客户程序哀求是哪个虚拟主机的服务,然后再进一步的处理。 长处:提供虚拟主机服务的机器上只要设置一个IP地址,理论上就可以给无数多个虚拟域名提供服务,占用资源少,治理方便。目前基本上都是使用这种方法来提供虚拟主机服务。 缺点:在早期的HTTP 1.0版本下不能使用。实际上现在使用的浏览器基本上都支持基于主机名的虚拟主机方法。 二、Apache服务器下的虚拟主机设置技术 2.1 Apache WWW服务器简介 Apache WWW服务器是目前Internet上使用最广的WWW服务器软件。通过灵活的配置,它可以完成几乎您想得到的功能。本文主要介绍在Apache 下设置各种虚拟主机的方式。 2.2 Apache WWW服务器下基于IP地址的虚拟主机设置 使用这种虚拟主机方法,首先要在服务器上为每个虚拟主机单独设置一个IP地址。这些IP地址可以通过增加多个网卡或者在一个网卡上设立多个IP地址来完成。有了多个IP地址后,可以采用以下两种方法之一来设置Apache: 2.2.1 为每个虚拟主机运行一份Apache 采用这种方法,每一份Apache程序可以以单独的用户运行,因此各个虚拟主机之间互不影响。设置这种虚拟主机时,只要为每一份Apache设置一套配置文件就可以了,唯一需要注重的是:必须使用“Listen”语句,强制每一份Apache 仅仅在属于“自己”的IP地址上接收服务哀求。 长处:各个虚拟主机之间互不干扰,安全性高。 缺点:占用系统资源较多。 2.2.2多个虚拟主机共享同一份Apache 采用这种方法,各个虚拟主机共享同一份Apache,因此各个虚拟主机之间有一定的影响,尤其是执行CGI程序时,可能会带来一些严峻的安全问题。设置这种虚拟主机时,只要为每一个虚拟主机设置类似如下的信息即可 <VirtualHost www.company1.com> DocumentRoot /home/company1 … </VirrualHost> 长处:占用系统资源比上一种方法少。 缺点:安全性低,每个虚拟主机仍旧需要占用一个IP地址。 2.3 Apache WWW服务器下简朴的基于名字的虚拟主机设置 这种方法下,各个虚拟主机共享同一份Apache,因此有CGI程序运行时,安全性也不高。设置这种虚拟主机时,只要为每一个虚拟主机设置类似如下的信息即可 NameVirtualHost 111.222.33.44 ; 在这个IP地址接收虚拟主机的服务 <VirtualHost 111.222.33.44> ServerName www.company1.com DocumentRoot /www/company1 </VirtualHost> <VirtualHost 111.222.33.44> ServerName www.company2.com DocumentRoot /www/company2 </VirtualHost> 长处:只要一个IP地址就可以提供大量的虚拟主机服务。 缺点:安全性差。维护这些虚拟主机时需要更改配置文件,并且需要重新启动Apache进程才能起作用。因此不适合进行大规模的虚拟主机服务。 2.4 Apache WWW服务器下基于名字的大规模虚拟主机设置 所谓大规模虚拟主机,是指能够提供异常多的虚拟主机服务,比如能提供超过数十万个域名的虚拟主机服务。假如使用以上讨论的方式,是很难完成的。实现这种服务的一种方法是利用Apache 功能强盛的URL重写功能。下面以一个实例来说明这种方法。 2.4.1 Apache中URL重写功能 Apache 1.2及以后版本都有URL重写(Rewrite)功能。简朴的说,URL重写功能就是在Apache接收到哀求后,在处理的过程中能根据预先设定的规则,对哀求中的URL进行修改。这些规则主要由正规表达式组成。重写依靠于输入的URL、各种服务器端环境变量、HTTP哀求头中的内容、时间,甚至可以通过外部的程序来使用数据库中的信息来帮助重写。 URL重写功能异常强盛,通过URL重写,可以使Apache完成非常复杂的功能。当然,URL重写功能本身也比较复杂,关于URL重写功能的具体说明可以参看Apache 的随机文档。 2.4.2 使用Apache中URL重写功能实现基于名字的大规模虚拟主机设置 假设机器www.home.com提供名字形如abcde.home.com、hijk.home.com等的大规模虚拟主机服务。其中虚拟主机名必须是字母或数字,并且长度至少为3。为了防止一个目录下文件或子目录太多而对性能产生很大的负面影响,对用户的目录按照名字进行分级划分,如虚拟主机abcde.home.com的相关文件存放在目录/member/ab/de/abcde下面。其中“ab”、“de”分别是“abcde”的前边两个字符和最后两个字符。当用户哀求http://abcde.home.com时,系统应该返回/member/ab/de/abcde下面的文件。下面是为了完成这种功能需要进行的设置: 1. 对域名服务器的设置 假设www.home.com的IP地址为202.103.190.57,在域名服务器DNS的home.com数据文件中增加一行: -------------------------------------------------------------------------------- * IN A 202.103.190.57 -------------------------------------------------------------------------------- 这样,所有 *.home.com的IP地址都会被解析为202.103.190.57,就没有必要为各个虚拟主机分别进行设置。 2. 对Apache的设置 首先使用命令“httpd -l”检查mod_rewrite模块是否已经编译到Apache中,假如没有,重新编译Apache。 然后在Apache的配置文件httpd.conf中增加如下语句(其中以“#”开头的为注释): -------------------------------------------------------------------------------- #禁止使用机器的正式名 UseCanonicalName off #使能重写功能 RewriteEngine on RewriteMap lowercase int:tolower # 为安全考虑,对CGI程序不进行重写 RewriteCond %{REQUEST_URI} !^/cgi-bin/ # 对www.home.com不重写,其他的重写 RewriteCond ${lowercase:%{HTTP_HOST}} !^www.home.com(.*)$ RewriteCond ${lowercase:%{HTTP_HOST}} ^[a-z0-9-]+.home.com(.*)$ # 首先把机器名改为小写,添加到哀求的文件路径前,并继承处理 RewriteRule ^(.+) ${lowercase:%{HTTP_HOST}}$1 [C] # 重写哀求 RewriteRule ^([a-z0-9])([a-z0-9])([a-z0-9]).home.com([.]*)/(.*) /member/$1$2/$2$3/$1$2$3/$5 RewriteRule ^([a-z0-9])([a-z0-9])([a-z0-9]*)([a-z0-9])([a-z0-9]).home.com([.]*)/(.*) /member/$1$2/$4$5/$1$2$3$4$5/$7 -------------------------------------------------------------------------------- 长处:只要一个IP地址就可以提供大量的虚拟主机服务,维护方便。 缺点:安全性低。上例为了增强安全性,禁止运行用户自己的CGI程序。 2.5 Apache WWW服务器下的重定向虚拟主机设置 重定向虚拟主机是指仅仅提供重定向功能,而不实际存放用户主页数据的虚拟主机。比如,某站点有多个镜像服务器,假设为www1.user.com、www2.user.com,…wwwn.user.com。这些服务器放在不同的网络上,分布于各地的客户访问这些服务器的速度也互不一样。而站点www.home.com通过虚拟域名user.home.com为这些镜像的服务器提供虚拟主机服务。当客户访问http://user.home.com时,www.home.com根据用户的IP地址、收集到的网络拓扑结构信息,把客户重定向到对该客户来说访问速度最快的站点。 重定向虚拟主机服务也可以通过使用URL重写功能来完成。这里仅给出简朴的重写规则: --------------------------------------------------------------------------------- RewriteRule ^([a-z0-9]+).home.com([.]*)/(.*) /www/cgi-bin/nph-redirect.cgi/$1/$3 [T=application/x-httpd-cgi,L] --------------------------------------------------------------------------------- 其中,nph-redirect.cgi为一个CGI程序,为了实现自动重定向,它需要产生完整的HTTP 应答头信息。该程序通过环境变量PATH_INFO得到用户哀求的URL,通过环境变量REMOTE_ADDR得到用户的IP地址,并根据网络拓扑情况生成重定向信息,返回给客户。 返回类别: 教程 上一教程: 如何设置二级域名? 下一教程: 服务器CCPROXY常见问题解答 您可以阅读与"APACHE下的虚拟主机设置"相关的教程: · 用APACHE实现虚拟主机服务 · 在APACHE中,同一个IP配置两个虚拟主机的例子 · 没有DNS亦玩转虚拟主机 · 如何设置虚拟匿名FTP主机 · LINUX下的DNS设置详解 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |