这几天部署系统,对linux下的apache和resin的虚拟主机配置也稍与心得,与大家分享一下。我们都知道apache有两种虚拟主机的配置方式,一种是基于IP的多IP配置,一中是基于主机名的单IP配置。前段时间我也发了一篇关于多IP的虚拟主机配置文章,大家有兴趣的可以看一看。我今天说的是如何用一个IP来配置多域名的虚拟主机配置。
版本说明:我使用的是apache2.0以上版本,resin是3.0.18以上版本;还是先做几个假设哈,比如我们有一个IP地址是:192.168.1.112,然后我们需要在该机器上配置两个应用,域名分别是:www.web1.cn和www.web2.cn这两个。另外再假设你已经做好了apache和resin的整合工作,apache的安装目录是:/usr/local/apache,resin的安装目录是:/usr/local/resin。好了,下面就开始配置咯~~~
其实是很简单的,首先修改apache的配置文件,命令和配置如下:
#cd /usr/local/apache/conf
#vi httpd.conf
找到### Section 3: Virtual Hosts这个位置,如果没有也没关系,就自己加吧。在这个地方加上如下的配置信息:
#注意这一行配置一定要,没有它就不是基于名称的虚拟主机配置了
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /data/web/web1
ServerName www.web1.cn
CustomLog logs/web1-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /data/web/web2
ServerName www.web2.cn
CustomLog logs/web2-access_log common
</VirtualHost>
这里就是配置两个虚拟主机的配置,其中NameVirtualHost 这一行是必须要的,它后面用*标识本机的任何IP地址,如果你想使用特定的IP,就改成你需要的IP地址,但是必须保证你的IP必须是本机的某一个网络接口。我们这里使用*来配置,即可以适应本机的任何IP,这样即使机器的IP地址变了我们的配置是不需要变的,这也是好处之一哦,呵呵~~~
然后下面的VirtualHost段就是配置单个虚拟主机的配置了,注意<VirtualHost *:80>这里也是使用的*,要保证这里的*和NameVirtualHost 后的配置一样哦,否则启动或停止apache的时候会出现警告的:-)。每一个VirtualHost最重要和必须要的就是DocumentRoot和ServerName两个配置了,前者是来配置你这个虚拟主机的根目录的,后一个就是你这个虚拟主机的访问域名了,我们这里使用的是www.web1.cn和www.web2.cn这两个域名。保存配置文件,然后重新启动apache。
我们配置完了apache,就开始resin的配置了,如下:
#cd /usr/local/resin/conf
#vi resin.conf
找到<host id="" root-directory=".">这一行,这是resin的默认主机配置,我们在这个host段的后面(注意是host段哦,不是host里面)加上如下的配置:
<host id="www.web1.cn" root-directory=".">
<web-app id="/" document-directory="/data/web/web1" />
</host>
<host id="www.web2.cn" root-directory=".">
<web-app id="/" document-directory="/data/web/web2" />
</host>
注意这里我们加了两个host段,表示配置两个主机地址。注意这里的host中的id就是我们在apache中配置的那两个域名,然后这里的document-directory也分别对应apache中的DocumentRoot的路径配置。然后保存修改,重新启动resin就可以了。
为了保证我们能够使用域名访问这两个系统,我们得配置windows下的hosts文件(假域名嘛,呵,要不就访问不到咯)。在C盘中搜索hosts这个文件(注意打开搜索的高级选项,将搜索系统文件和隐藏文件都勾上,否则可是搜索不到的呢~)。找到后,然后打开这个文件,在最后加入如下几行:
192.168.1.112 www.web1.cn
192.168.1.112 www.web2.cn
然后保存hosts文件,这里的IP就是我们服务器的IP地址。然后就可以通过www.web1.cn访问我们的/data/web/web1系统了,通过www.web2.cn访问我们的/data/web/web2系统了。这样也就完成了我们的单IP多域名的虚拟主机配置了。这里还要说一点的就是,如果你直接输入IP地址,那么就是默认访问第一个系统,即www.web1.cn对应的系统了,因为apache找不到与这个IP地址中稍带的主机名匹配的虚拟主机,所以就默认访问第一个虚拟主机了,所以利用这一点我们可以设置默认的虚拟主机:-)
好了,apache和resin的虚拟主机也配置完毕了,下面说说它实现的流程和简单的原理吧,呵呵,说的不好可不要仍鸡蛋啊~
我们在使用www.web1.cn访问系统时,apache会检查request headers中的Host字段,然后根据这个Host去查找与它匹配的虚拟主机,比如我们使用www.web1.cn访问的时候,请求的headers中的host字段就是www.web1.cn,这样apche获取这个后就会查找ServerName为www.web1.cn的虚拟主机,我们这里找到的就是/data/web/web1这个系统了,如果apache查找不到对应的虚拟主机,则会直接访问第一个配置的虚拟主机,比如我们用IP访问的时候就可以看到效果(比如调换连个VirtualHost的位置)。resin嘛其实也是一样的咯,同样会检测主机名来区分不同的访问请求。
其实这里不用apahe而直接使用resin也可以达到这样的效果,比如你访问http://www.web1.cn:8080就可以绕过apache直接访问resin了,同样也是可以达到多虚拟主机的访问控制的。使用apache的好处就是apache作为一个成熟的webServer产品,可以提供很好的对静态文件的支持,这点要比tomcat和resin强,但是在动态如jsp和servlet方面就需要专门的servlet引擎来处理,所以也就是为什么现在大家都很流行使用apache结合tomcat或resin来实现服务器的配置了。
PS一下:apache和tomcat都是同一个组织开发的开源产品,目前其提供一个插件(名称不是很记得了)可以将apache和tomcat进行无缝连接。不过试过,呵呵,有兴趣的朋友不妨试一试~