有许多虚拟服务器的提供商可以在一台主机上为多个用户提供Web服务,并且每个Web服务器可以通过不同的域名来访问。在Debian上,我们可以轻松的通过apache2来实现类似的功能。除了进行一些简单的配置外,我们所需要的软件包都使用Debian提供的安装包而不必从源代码来安装。
有许多种不同的方法可以将Apache配置这样的功能,这里介绍一种通过 NameVirtualHost 来进行配置的方法,这种方法的好处是你不需要在主机上绑定多个不同的IP地址,只需要将不同的域名都指向Web服务器的IP地址即可。
例如在一台主机IP地址为 222.222.222.222的Web服务器上,希望配置 www.rediceli.com,mail.rediceli.com,services.rediceli.com,只需要在DNS服务器(或DNS提供商的服务器)上将这些域名都指向222.222.222.222即可。当然,还可以是另一些完全不同的域名,如 www.example.com。
因为我们要在一台机器上提供多个Web服务器,为了不至于引起不必要的混乱,最好将每个服务器的Web根目录,CGI目录和日志目录等完全分开。可以直接在Debian提供的Web目录下构造这些目录,也可以在一个完全不同的目录里构造,如/opt/www目录。例如,可以类似如下的目录结构:
root@debain ~# mkdir /opt/www
root@debain ~# mkdir /opt/www/www.rediceli.com root@debain ~# mkdir /opt/www/www.rediceli.com/html root@debain ~# mkdir /opt/www/www.rediceli.com/cgi-bin root@debain ~# mkdir /opt/www/www.rediceli.com/logs
root@debain ~# mkdir /opt/www/mail.rediceli.com root@debain ~# mkdir /opt/www/mail.rediceli.com/html root@debain ~# mkdir /opt/www/mail.rediceli.com/cgi-bin root@debain ~# mkdir /opt/www/mail.rediceli.com/logs
root@debain ~# mkdir /opt/www/service.rediceli.com root@debain ~# mkdir /opt/www/service.rediceli.com/html root@debain ~# mkdir /opt/www/service.rediceli.com/cgi-bin root@debain ~# mkdir /opt/www/service.rediceli.com/logs
上面的过程,我们分别为三个域名创建了Web服务器所需的目录。下一步,我们应该在apache的配置中开启虚拟主机(Virtual hosts)的功能。简单的方法是创建一个配置文件 /etc/apache2/conf.d/virtual.conf,文件的内容如下:
# # We're running multiple virtual hosts. # NameVirtualHost *
完成上面的工作后,我们可以开始为每个域名建立一个独立的配置文件。Apache2的站点配置包括两个目录:
- /etc/apache2/sites-available 这个目录包含一些可用的站点配置文件,但这些并不一定生效。
- /etc/apache2/sites-enabled 这个目录内的配置为已经生效的站点的配置。
apache2启动时,sites-enabled目录的内容将被读取并生效,而sites-available目录的内容则不会理会。通常Debian的作法是,将所有的站点配置文件都放在sites-available中,而将需要生效的配置通过软链放置到sites-enabled中。我们配置时也会将所有的配置都放置到sites-available目录中,然后在sites-enabled中创建指向相应配置的链接。Debian有一些工具a2ensite和a2dissite来辅助我们完成允许和禁用站点的功能,这样,我们只需要在sites-available目录中创建相应的配置,再执行相应的命令,即可使这些配置生效或禁用。
下面我们开始为 www.rediceli.com 创建配置文件,创建文件 /etc/apache2/sites-available/www.rediceli.com,包含下面的内容:
# # www.rediceli.com (/etc/apache2/sites-available/www.rediceli.com) # <VirtualHost *> ServerAdmin webmaster@rediceli.com ServerName www.rediceli.com ServerAlias rediceli.com
# Indexes + Directory Root. DirectoryIndex index.html DocumentRoot /opt/www/www.rediceli.com/html/
# CGI Directory ScriptAlias /cgi-bin/ /opt/www/www.rediceli.com/cgi-bin/ <Location /cgi-bin> Options +ExecCGI </Location>
# Logfiles ErrorLog /opt/www/www.rediceli.com/logs/error.log CustomLog /opt/www/www.rediceli.com/logs/access.log combined </VirtualHost>
|