Apache以基于域名的虚拟主机方式与多个WebLogic Server集成
1. 测试原理概述
虚拟主机原理
WWW服务器虚拟主机是指使用一台物理机器,充当多个主机名的WWW服务器。比如由一台机器同时提供http://www.jsp-examples.com/, http://www.logindemo.com/ 等的WWW服务,而浏览这些WWW站点的用户感觉不到这种方式下跟由不同的机器提供不同的服务有什么差别。使用WWW虚拟主机的好处在于,一些小规模的网站,通过跟其他网站共享同一台物理机器,可以减少系统的运行成本,并且可以减少管理的难度。
WWW虚拟主机有两种工作方式:
基于IP地址的虚拟主机方式。
这种方式下,不同的主机名解析到不同的IP地址,提供虚拟主机服务的机器上同时设置有这些IP地址。服务器根据用户请求的目的IP地址来判定用户请求的是哪个虚拟主机的服务,从而进一步的处理。
缺点:基于IP地址的虚拟主机方式需要在提供虚拟主机服务的机器上设立多个IP地址,既浪费了IP地址,又限制了一台机器所能容纳的虚拟主机数目。因此这种方式越来越少使用。但是,这种方式是早期使用的HTTP 1.0协议唯一支持的虚拟主机方式。
基于主机名的虚拟主机方式。
由于基于IP地址的虚拟主机方式有如上的缺点,HTTP 1.1协议中增加了对基于主机名的虚拟主机的支持。具体说,当客户程序向WWW服务器发出请求时,客户想要访问的主机名也通过请求头中的"Host:"语句传递给WWW服务器。比如,http://www.jsp-examples.com/, http://www.logindemo.com/ 都对应于同一个IP地址(即由同一台机器来给这两个虚拟域名提供服务),客户程序要存取http://www.jsp-examples.com/index.html时,发出的请求头中包含有如下的内容:
GET /index.html HTTP/1.1
Host: http://www.jsp-examples.com/
…..
WWW服务器程序接收到这个请求后,可以通过检查"Host:"语句,来判定客户程序请求是哪个虚拟主机的服务,然后再进一步的处理。
优点:提供虚拟主机服务的机器上只要设置一个IP地址,理论上就可以给无数多个虚拟域名提供服务,占用资源少,管理方便。目前基本上都是使用这种方式来提供虚拟主机服务。
缺点:在早期的HTTP 1.0版本下不能使用。实际上现在使用的浏览器基本上都支持基于主机名的虚拟主机方式。
这里我们只测试基于域名方式的Apache虚拟主机与的WebLogic Server的集成,各个虚拟主机共同通过1个apache连接多个WebLogic Server。
2. 测试环境
操作系统: RedHatEnterpriseLinux4(x86) (虚拟机)
主机1 IP: 192.168.1.199 WebLogic 端口7001
主机2 IP : 192.168.1.114 WebLogic 端口7001
WebServer: Apache2.0.54
中间件: WebLogic 8.1
两台主机同时装有WebLogic 8.1,主机1的WebLogic发布/home/applications/jsp-examples为默认应用,主机2的WebLogic发布/home/applications/LoginDemo应用为默认应用。主机1 装apache做WebServer。
3. 基本环境搭建
依照测试环境更改主机设置,安装配置软件,WebLogic发布各自应用,并把mod_wl_20.so插件cp到apache安装主路径的modules路径下。至此搭建基本测试环境完毕。详细步骤参考―――――。
4. 具体配置
#vi /usr/local/apache/conf/httpd.conf
修改apache默认发布路径DocumentRoot及后边的<Directory /> 为
DocumentRoot “/home/applications/jsp-examples”
<Directory “/home/applications/jsp-examples”/>
并在在最后添加:
LoadModule weblogic_module modules\mod_wl_20.so
//使apache启动时载入Weblogic 模块。
NameVirtualHost 192.168.1.199
//设置接受请求的主机,这里设为装有apache的主机IP
<VirtualHost 192.168.1.199>
//配置第一台虚拟主机
ServerName www.jsp-examples.com
//主机域名
DocumentRoot /home/applications/jsp-examples
<IfModule mod_weblogic.c>
//将这台主机的jsp请求发给192.168.1.199:7001处理
WebLogicHost 192.168.1.199
WebLogicPort 7001
MatchExpression *.jsp
MatchExpression *.do
</IfModule>
</VirtualHost>
<VirtualHost 192.168.1.199>
//配置第2个虚拟主机
ServerName www.logindemo.com
DocumentRoot /home/applications/LoginDemo
<Directory "/home/applications/LoginDemo">
//发布路径与默认配置不同,所以要设置覆盖默认设置
Options Indexes FollowSymLinks
AllowOverride None
Oredr allow,deny
Allow from all
</Directory>
<IfModule mod_weblogic.c>
//将这台主机的jsp请求发给192.168.1.114:7001处理
WebLogicHost 192.168.1.114
WebLogicPort 7001
MatchExpression *.jsp
MatchExpression *.do
</IfModule>
</VirtualHost>
5. 测试结果
因为要用域名来识别不同的虚拟主机,我们这里这样测试:修改网内客户机的/etc/hosts,添加:
192.168.1.199www.jsp-examples.com
192.168.1.199www.logindemo.com
把两个名字都映射到相同的IP上,这样就可以都访问到主机1,apache会根据不同的名字找到不同的VirtualHost,以处理应用。
启动2台主机上的WebLogic服务,启动主机1上的apache,在1台修改过/etc/hosts的主机上的浏览器输入http://www.jsp-examples.com和http://www.logindemo.com,就可以分别访问主机1上发布的jsp-examples应用的jsp页面和主机2上发布的LoginDemo应用的jsp页面。