在apache下配置虚拟主机

来源:互联网 发布:幽灵的礼物知乎 编辑:程序博客网 时间:2024/04/25 02:43
这之前我一直以为搞虚拟主机是很高深的技术(可能在apache2.2以前是很困难的,我也没有专门调查过),自己尝试了一下,原来很简单。

在apache的配置文件目录里,找到 extra 目录,你会发现 httpd-vhosts.conf 文件,打开文件一看,你会发现以下内容(注释已经省略)

NameVirtualHost *:80

ServerAdmin webmaster@dummy-host.robert.qiu.com
DocumentRoot "/www/docs/dummy-host.robert.qiu.com"
ServerName dummy-host.robert.qiu.com
ServerAlias www.dummy-host.robert.qiu.com
ErrorLog "logs/dummy-host.robert.qiu.com-error_log"
CustomLog "logs/dummy-host.robert.qiu.com-access_log common"


ServerAdmin webmaster@dummy-host2.robert.qiu.com
DocumentRoot "/www/docs/dummy-host2.robert.qiu.com"
ServerName dummy-host2.robert.qiu.com
ErrorLog "logs/dummy-host2.robert.qiu.com-error_log"
CustomLog "logs/dummy-host2.robert.qiu.com-access_log common"

在这一堆配置信息中实际上我们只要注意以下内容既可(序号是我加上去的,注意,配置文件的原文)

1. NameVirtualHost *:80

2.

...

3. DocumentRoot "/www/docs/dummy-host.robert.qiu.com"

4. ServerName dummy-host.robert.qiu.com

...

第一句表示apache针对本服务器某个ip地址和端口,进行虚拟主机设置。听上去有些拗口,举个例子,如果服务器有2个ip,192.168.1.1,192.168.1.2,那么如果第一条设置成 NameVirtualHost 192.168.1.1:80, 那么,只有针对192.168.1.1这个ip的请求才能按照下面虚拟主机的设置得到处理,比如:http://192.168.1.1/filename。在这里设置为*:80,则表示无论请求的ip是多少都能得到处理,因为你的服务器放到不同的局域网里可能分到的ip不同,设置成这样就不需要修改了。

第二句 配套第一句使用,即对虚拟主机进行具体的配置,其中的*:80含义和上面一句相同。

第三句 表示这个虚拟主机的文件根目录所在位置,它的意思和主配置文件httpd.conf中的一样

第四句 这是配置的关键,表示从客户端的请求所定义的服务器名,将得到服务器的处理。这里我一开始也不明白,上面不是设置了ip吗,为什么这里还要设置机器名。所谓虚拟主机就是一个台服务器能够当成N台服务器使用,那在internet上,一台服务器外网只有一个ip,如果一台服务器的外网ip是111.111.111.111,那么我们第一句就可以设定为 NameVirtualHost 111.111.111.111:80,来响应客户端的请求,当然设置成*:80,也可以。由于dns的作用,我们可以用n个域名指向111.111.111.111,比如 www.domain1.com, www.domain2.com, www.domain3.com... 但是当你用这些域名访问的时候会发现,你打开的都是同一个页面(当然是在设置虚拟主机之前)。如果你想用不同的域名访问不同的内容,那么必须有一个功能来根据你不同的域名来定位不同的资源,于是ServerName 这个命令就起作用了。所以整个2-4句的作用就是把对 dummy-host.robert.qiu.com请求映射到 /www/docs/dummy-host.robert.qiu.com 目录中

NameVirtualHost *:80

ServerAdmin webmaster@domain1.com
DocumentRoot "/www/domain1"
ServerName www.domain1.com
ServerAlias www.domain1.com
ErrorLog "logs/domain1-error_log"
CustomLog "logs/domain1-access_log common"


ServerAdmin webmaster@domain2.com
DocumentRoot "/www/domain2.com"
ServerName www.domain2.com
ErrorLog "logs/domain2.com-error_log"
CustomLog "logs/domain2.com-access_log common"


ServerAdmin webmaster@domain3.com
DocumentRoot "/www/domain3.com"
ServerName www.domain3.com
ErrorLog "logs/domain3.com-error_log"
CustomLog "logs/domain3.com-access_log common"

按照上面的分析,上面的这些配置信息就配置除了

www.domain1.com

www.domain2.com

www.domain3.com

三台虚拟主机了

原创粉丝点击