2013-09-24 17:38:01
来 源
IT技术网
Apache
本文介绍Apache服务器如何配置虚拟主机(一),希望对于初学Apache服务器相关的朋友有帮助,更多Apache安装、配置、报错处理等资源请本站内搜索。

虚拟主机使得一台服务器可以运行多个网站。本文介绍如何配置服务器使其支持虚拟主机,包括基于IP的虚拟主机和基于名称的虚拟主机,以及通过运行多个服务daemon实现一台机器运行多个网站的方法。

一、虚拟主机及其应用

  虚拟主机就是运行在同一物理服务器上的具有不同名字的多个Web网站。它的基本思想是:即使所有网站都运行在同一个服务器上,Apache也知道用户访问的是哪一个网站,而且能够正确地返回用户所请求的内容。

  虚拟主机是这样一种特殊的技术:它使得我们可以在一台机器上运行多个Web网站,支持许多不同的域名和一个域之内的多个名字,从而使得一台通过DSL接入的家用计算机看起来象是一屋子的服务器。这是一种非常巧妙的技术。

  为什么要使用虚拟主机

 或许你现在已经有了自己的应用虚拟主机的设想。下面是本人通常使用虚拟主机的情况。我在一家Web设计公司工作。为客户开发Web网站时,我们总是为该客户配置一个专用的虚拟主机。这些虚拟主机往往是基于名称的虚拟主机,因为这设置起来比较快,而且几乎总是只在内部进行。也就是说,在内部DNS服务器上设置一下名称,这样内部的主机就可以看到这个Web网站,而外面的浏览器只能看到我们开发服务器上公开的内容。

 这种做法有着许许多多的好处。它使得我们能够设置网站的目录结构,其设置方法又和开发完成后实际运行的网站完全一样。它使得我们能够完全地分离不同网站的文件,不会出现搞不清某个文件属于哪个网站的混乱。此外,从开发者的角度来看,它使得我们能够在DreamWeaver中设置完全独立的网站,而不仅仅是设置同一网站的不同子目录。

 最后,如果使用虚拟主机,不论我们同时开发的客户项目有多少,都无需分别为每个网站配置一个新的服务器。在任何时候这都是使用虚拟主机最主要的理由。

二、基于IP的虚拟主机

  我们可以用两种方法设置虚拟主机。这两种方法只是服务器上配置的不同,对客户来说没有什么区别——也就是说,用户无法知道他们所使用的虚拟主机属于哪一种类型,甚至不会知道自己正在使用虚拟主机。

 这两种类型分别是基于IP的(IP-based)虚拟主机和基于名称的(Name-Based)虚拟主机。简单地说,两者的区别在于:使用基于IP的虚拟主机时,每一个虚拟主机都有一个不同的IP地址,而基于名称的虚拟主机都有相同的IP地址,但它们的名称不同。两种类型各有优点,但它们的实现方法并没有什么大的差别。

 在基于IP的虚拟主机环境中,同一个服务器机器上运行着多个Web网站,但每一个Web网站都有其自己的IP地址。为了实现这一点,我们首先要在操作系统上设置这些IP地址。大多数现代操作系统都允许我们为一台机器设置任意多的IP地址,具体的设置方法对每种操作系统来说都不同。本文不准备在方面作深入的介绍。如果你不熟悉如何在自己的操作系统上进行设置,请向熟悉的专家请教。一般这种设置并不是很困难。或者,你也可以跳过这种基于IP的虚拟主机,直接转入下面介绍的基于名称的虚拟主机。

  有些老式的操作系统要求每个NIC(network interface card,网卡)对应一个IP地址,但现在一般不再有这种限制。

 在机器上设置好多个IP地址之后,我们还要在DNS(域名服务器)中设置这些IP地址,这样DNS就能够解析我们赋予这些IP地址的名称。这里我们不准备介绍DNS记录的具体设置方法,你可以要求DNS服务器的管理员设置这些记录。

 接下来要做的工作就直接和Apache有关了。假定我们已经将所有的IP地址设置到了机器上,每一个IP地址都有相应的DNS记录,要在Apache的httpd.conf配置文件中增加的内容如下所示。

 这里我们假定有三个IP地址,对应的名称分别为name1.mydomain.com、name2.mydomain.com和name3.mydomain.com。当然,这里指定的名称也可以属于完全不同的域,例如www.mydomain.com 和 www.myotherdomain.com。

  加入httpd.conf配置文件的内容如下所示: DocumentRoot /usr/local/apache/name1_www

ServerName name1.mydomain.com

ErrorLog /usr/local/apache/logs/name1_logs/error_log TransferLog /usr/local/apache/logs/name1_logs/access_log

ServerAdmin [email protected] DocumentRoot /usr/local/apache/name2_www

ServerName name2.mydomain.com

ServerAlias name2

DocumentRoot /usr/local/apache/name3_www

ServerName name3.mydomain.com ScriptAlias /use/local/apache/name3_cgi

 注意我们并不需要为每个虚拟主机指定所有的配置细节。凡是没有指定的配置细节都将从服务器主配置文档继承。例如在上面的第二个虚拟主机中,我们没有指定记录日志的地方,这个虚拟主机将把日志信息写入主服务器日志文件。

 另外也请注意在第三部分中我们指定了一个CGI目录。对于其他两个部分来说,当用户访问一个包含/cgi-bin/的URL时,都默认使用主服务器配置中所指定的CGI目录,这是因为它们的虚拟主机配置中都没有指定CGI目录。

 几乎所有的配置指令都可以用于区。在服务器说明文档中,我们可以注意到每一个指令都有其合法应用场所的说明,某个指令是否可以在虚拟主机配置中使用应该已经相当清楚。

 请记住务必在重新启动服务器之前测试一下新的配置文件:

/usr/local/apache/bin/apachectl configtest

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。