软件指南针:专注于软件传播与分享

Apache配置基于域名的虚拟主机入门详解

来源:原创 897次浏览 0条评论
☞ 本文主要介绍软件Apache HTTP Server的相关内容:Apache配置基于域名的虚拟主机入门详解

   其下列版本/分支可以参考本文:

  • 全部版本/分支

在Apache HTTP Server(以下简称Apache)中,我们可以非常方便地配置基于域名的虚拟主机,从而实现通过多个不同的域名分别访问同一个Apache服务器下的不同Web站点。例如:我们可以让域名abc.com映射到Apache站点根目录下的abc文件夹(当然也可以映射到Apache安装目录以外的其他文件夹)。

本文中,Apache的安装目录为E:/program/Apache2.2,站点文件根目录为E:/program/Apache2.2/htdocs

1、将域名映射到服务器的IP地址

如果你真的拥有诸如abc.comsoftown.cn之类的域名,那么你必须确保在你的DNS服务器配置中将这些域名映射到Apache所在服务器的IP地址(一般情况下,为你提供域名注册服务的ISP均提供了相应的配置管理工具)。

如果你只是在自己的计算机上进行测试,也不用担心没有域名,我们完全可以通过修改计算机的配置从而在本地模拟出相应的域名。在这里,我们使用记事本一类的文本编辑工具打开Windows系统中C:\Windows\System32\drivers\etc目录下的hosts文件,在其中追加如下文本内容:

127.0.0.1 abc.com

当然,你也可以根据需要在hosts文件中自行添加多条记录。添加完毕后,当你在当前计算机上访问这些域名时,实际上访问的就是你自己的这台计算机。

2、修改配置文件httpd.conf

接着,我们需要在Apache安装目录/conf/httpd.conf文件中进行虚拟主机的相关配置。不过,为了方便集中管理所有的虚拟主机配置选项,Apache官方推荐我们将所有与虚拟主机有关的配置存放在文件Apache安装目录/conf/extra/httpd-vhosts.conf中,Apache已经自带了该文件,并在其中为我们提供了配置虚拟主机的参考示例。

不过,在默认情况下,Apache并不会加载httpd-vhosts.conf文件中的配置内容,我们需要在httpd.conf中修改相应配置,从而让Apache在启动时加载httpd-vhosts.conf

如下图所示,在httpd.conf文件中找到标注的行,去掉前面的注释符号#即可。

Apache配置文件中前面带#或者;的内容为注释。

Apache包含虚拟主机配置文件

备注:如果你的配置由于之前的改动,已经找不到该行代码,也可以直接在该文件中添加如下两行配置:

#加载时包含虚拟主机配置文件
Include conf/extra/httpd-vhosts.conf

3、修改配置文件httpd-vhosts.conf

然后,我们打开httpd-vhosts.conf文件,默认情况下,其配置示例如下图所示:

Apache的默认虚拟主机配置示例

接着,我们删除原文件中自带的两个VirtualHost配置段内容(即图中编号②的红框中的内容),并在此处添加如下配置内容:

<VirtualHost *:80>
    ServerName abc.com
    DocumentRoot "E:/program/Apache2.2/htdocs/abc"
</VirtualHost>

以上就是简单形式的虚拟主机配置,VirtualHost配置段可以有多个,每一个VirtualHost配置段就代表一个虚拟主机。

值得注意的是,当我们为Apache启用了虚拟主机配置之后,那么所有的用户请求都会交由对应的虚拟主机来处理,如果Apache找不到对应的虚拟主机,则会把该请求交给配置文件中排在最前面的虚拟主机来处理。

由于我们这里只配置了一个abc.com的虚拟主机,因此,即便用户不是通过abc.com、而是通过localhost或127.0.0.1来访问当前服务器,该请求仍然会交给abc.com的虚拟主机来处理,这就导致用户访问不到E:/program/Apache2.2/htdocs/abc文件夹以外的其他网页。

所以,我们必须在abc.com的虚拟主机之前添加一个VirtualHost配置段来充当默认的虚拟主机,该虚拟主机的ServerNameDocumentRoot应该与httpd.conf文件中全局配置的ServerNameDocumentRoot保持一致:

<VirtualHost *:80>
    DocumentRoot "E:/program/Apache2.2/htdocs"    
    ServerName localhost
</VirtualHost>

最后的配置内容如下图所示:

基于域名的虚拟主机的最终配置内容

到这里,基于域名的虚拟主机就已经配置成功了。此时重启Apache,我们就可以直接通过域名abc.com来访问E:/program/Apache2.2/htdocs/abc目录下的网页了。

当然,我们还可以根据需要进行更复杂的虚拟主机配置,以虚拟主机abc.com为例,我们可以进行如下配置:

<VirtualHost *:80>
    ServerName abc.com
    DocumentRoot "E:/program/Apache2.2/htdocs/abc"
    ServerAdmin webmaster@abc.com #站长邮箱设置
    DirectoryIndex index.html index.htm index.php #目录默认的欢迎页面索引顺序
    ErrorLog "logs/abc.com-error.log"  #错误日志
    CustomLog "logs/abc.com-access.log" common
    <Directory /> #站点目录权限设置
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    </Directory>
</VirtualHost>

想要了解虚拟主机的详细配置规则?请参考Apache虚拟主机配置规则。

作者:软件指南针(http://www.softown.cn),转载请保留出处!

用户评论

使用指南 故障排除 0 返回顶部