CentOS下Apache虚拟主机VirtualHost配置

本文将简述Apache虚拟主机VirtualHost配置

有些时候,我们可能需要在同一个安装有Apache的服务器主机上新建两个网站,它们分别用domain1.com和domain2.com访问,这时候可以用Apache自带的虚拟主机VirtualHost配置功能进行配置。
首先,我们来简单了解一下Apache的配置文件,一般为/etc/httpd/conf/httpd.conf 
#vi /etc/httpd/conf/httpd.conf 
打开这个配置文件可以看到如下描述:
# The configuration directives are grouped into three basic sections:
#  1. Directives that control the operation of the Apache server process as a
#     whole (the 'global environment').
#  2. Directives that define the parameters of the 'main' or 'default' server,
#     which responds to requests that aren't handled by a virtual host.
#     These directives also provide default values for the settings
#     of all virtual hosts.
#  3. Settings for virtual hosts, which allow Web requests to be sent to
#     different IP addresses or hostnames and have them handled by the
#     same Apache server process.
配置文件将Apache配置分为三个部分
第一部分用于控制Apache服务器进程的操作(针对全局环境);
第二部分用于定义主服务器或者默认服务器的参数(主服务器或者默认服务器用于处理那些没有被虚拟主机处理的请求),同时这些参数也作为所有虚拟主机的默认参数被使用;
第三部分用于配置虚拟主机,当对第三部分进行配置时,Apache服务器进程会将请求发送给不同的IP地址或者主机名对应的网站目录下的脚本进行处理,举个简单的例子,假设同一主机下配置了domain1.com和domain2.com两个网站,它们的文档目录分别为/var/www/domain1.com和/var/www/domain2.com,当在浏览器地址栏输入domain1.com时,将访问/var/www/domain1.com这个目录,当输入domain2.com时,将访问/var/www/domain2.com这个目录
下面我们说说虚拟主机的配置
在Apache配置文件中找到
#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
这是一个简单的示例,我们根据这个示例编写配置如下
<VirtualHost *:80>
    ServerAdmin 123456789@gmail.com
    DocumentRoot /var/www/domain1.com
    ServerName domain1.com
    ErrorLog logs/domain1.com-error_log
    CustomLog logs/domain1.com-access_log common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin 123456789@gmail.com
    DocumentRoot /var/www/domain2.com
    ServerName domain2.com
    ErrorLog logs/domain2.com-error_log
    CustomLog logs/domain2.com-access_log common
</VirtualHost>
配置完后,ErrorLog和CustomLog会保存在/etc/httpd/logs中。
配置过程中,需要将
#NameVirtualHost *:80 
这一行取消注释,即改为
NameVirtualHost *:80
否则重启Apache服务器(service httpd restart)时将会出现[warn] _default_ VirtualHost overlap on port 80, the first has precedence 
的警告,这时候第一个配置的虚拟主机将拥有最高的优先级,无论配置了多少虚拟主机(前提是都使用80端口),访问domain1.com、domain2.com、...、domainN.com都将访问到/var/www/domain1.com
另外,配置了虚拟主机之后,原先在第一、二部分配置的访问目录将无法继续访问,如果有需要,应该将原先在第一、二部分配置的访问目录也配置为虚拟主机
重启Apache服务器,在浏览器地址栏中输入domain1.com和domain2.com将访问到不同的网站
若要使虚拟主机的配置与默认配置不同,可以如下配置
<VirtualHost *:80>
    <Directory /var/www/domain1.com>
        Options FollowSymLinks
        AllowOverride None
        Options None
        Order allow,deny
        Allow from all
    </Directory>
    <IfModule dir_module>
        DirectoryIndex index.php index.html
    </IfModule>
    ServerAdmin 123456789@gmail.com
    DocumentRoot /var/www/domain1.com
    ServerName domain1.com
    ErrorLog logs/domain1.com-error_log
    CustomLog logs/domain1.com-access_log common
</VirtualHost>

此处将两个站点都配置为80端口(其他端口亦可行,前提是Listen的端口要对应),可以成功访问
关于配置不同端口,笔者做了如下测试:
a.当httpd.conf文件中Listen监听了80端口时,将两个虚拟主机配置为80和81端口,此时domain1.com可以访问,而domain2.com:81无法访问,但当访问domain2.com时,可以访问,但是访问到的是/var/www/domain1.com目录
b.当httpd.conf文件中Listen监听了81端口时,将两个虚拟主机配置为80和81端口,此时的情况类似于a的情况
c.尝试将Listen 80 这行注释掉(当然不行,纯粹试试),重启Apache时报错
no listening sockets available, shutting down
Unable to open logs

以上是关于Apache配置虚拟主机的小见解,希望有经验的网友批评指正。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值