您的位置:首页 > 运维架构 > Apache

CentOS下Apache虚拟主机VirtualHost配置

2016-02-18 12:39 615 查看
本文将简述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配置虚拟主机的小见解,希望有经验的网友批评指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息