技术开发 频道

珠联璧合之WAS社区版与HTTP Server

【IT168 专稿】    IBM WebSphere应用服务器社区版(WebSphere Application Server Community Edition)是基于Apache基金会开源项目Geronimo构建的轻量级Java EE应用服务器,可以方便地用于管理和开发Java应用。它采用Tomcat作为Web容器,集成了多种Java EE新技术。

    IBM HTTP Server是基于Apache HTTP Server的Web服务器。它负责处理来自客户端的HTTP请求,并向它们发送相应的HTTP应答。通常,IBM HTTP Server被用来处理静态内容,包括HTML页面和Applet等,因此经常为应用服务器提供辅助功能。在此,将IBM HTTP Server(以下简称IHS)和WebSphere Application Server Community Edition(以下简称WAS CE)配合使用有下几个益处:

    · IHS为WASCE进行URL代理。

    · IHS为WASCE承担SSL加密解密任务。

    · IHS处理静态页面,从而使WASCE可以专注于处理动态页面,例如JSP和Servlet。

    · 两者协作实现集群和负载均衡。

    与WebSphere应用服务器(WebSphere Application Server)内置了IBM HTTP Server,并且包含IHS的管理控制台不同,为了使WAS CE能与IHS协调工作,必须要做一些配置工作。本文将以WAS CE 2.1.1.2和IHS 7.0为例,讨论在Windows XP平台上如何对它们进行配置,以帮助WAS CE提高多方面的性能。

1. IBM HTTP Server的基本配置

    IHS的主要配置保存在<IHS_HOME>/conf (<IHS_HOME>为IHS的安装目录)文件夹下的httpd.conf文件中。配置文件的每一行包含一个指令,注释以#开头。通常IHS有如下一些默认的配置:

1     #服务器的根目录,此处仅为举例
2     ServerRoot "C:/Program Files/IBM/IHS7"
3
4     #在80端口侦听
5     Listen0.0.0.0:80
6
7     #用户能访问的文件根目录,默认为服务器安装目录下的htdocs文件夹
8     DocumentRoot "C:/Program Files/IBM/IHS7/htdocs"
9
10     # DocumentRoot文件夹的访问控制
11     <Directory "C:/Program Files/IBM/IHS7/htdocs">
12     #允许在此目录中使用符号连接。如果一个映射到目录的URL被请求,而此目录中又没有 index.html等索引页面,那么服务器会返回一个格式化后的目录列表。
13     Options Indexes FollowSymLinks
14     #禁止使用.htaccess文件
15     AllowOverride None
16     #规定allow和deny的优先级次序
17     Order allow,deny
18     #允许所有用户访问DocumentRoot
19     Allow from all
20     </Directory>

    IHS是一个模块化的服务器,我们可以通过配置文件中对服务器包含的模块进行功能增减。除了核心模块之外的多数模块都可以通过httpd.conf文件中<LoadModule>指令进行动态加载。如果需要用某个特定的模块存在与否来决定是否作出某些配置的时候。指令一般都放在<IfModule>指令段中。例如:

1     #加载status_module模块,它位于ServerRoot下modules文件夹
2     LoadModule status_module modules/mod_status.so
3
4     #如果status模块被加载,则请求状态的扩展信息
5     <IfModule mod_status.c>
6     ExtendedStatus On
7     </IfModule>

    IHS除了包含大部分Apache HTTP Server的模块之外,增加了LDAP认证模块和用于生成动态内容的FastCGI模块。IHS还提供了IKEYMAN工具用于管理密钥和证书,可以帮助我们提高WASCE的安全性。

    通常我们还需要用<ServerName>等指令来指定服务器的主机名和端口号,让IHS能够辨识自己,并提高可靠性。在本文中,我们仅针对本机进行部署和测试,因此对于主机名的配置,在此不作赘述。默认情况下,本机的IHS启动之后,在浏览器中访问http://localhost,会看到如下的结果:

2. 把WAS CE隐藏在IHS之后

    在本机安装WASCE之后,其管理控制台(Administrative Console)的地址为http://localhost:8080.可以想象一个远端的客户端并不想以一个类似http://<WASCE_IP>:8080的地址来访问WASCE,为什么不是http://<WASCE_IP>或者http://<WASCE_NAME>?为了解决这个问题,我们可以借助IHS的正向和反向代理功能。

    IHS的正向代理功能可以将WASCE的地址映射到IHS的URL空间,帮助客户端访问远程的WASCE(无论WASCE和IHS是否在一台物理主机上),也能用于缓冲数据,以降低IHS和WASCE之间的负载。反向代理能调整由IHS发送给客户端的HTTP回应头中的URL,让WASCE上的页面看起来像是存在于IHS上一样,从而隐藏了WASCE的IP地址,主机名和端口号。在停止IHS之后,对httpd.conf作如下的配置:

1     #加载代理模块和HTTP代理模块
2     LoadModuleproxy_module modules/mod_proxy.so
3     LoadModuleproxy_http_module modules/mod_proxy_http.so
4
5     <IfModulemod_proxy.c>
6     #将WASCE的服务器下/console映射到IHS空间中,若WASCE不在本机,localhos
7     #应为WASCE的IP地址或可识别的主机名,8080为WASCE的HTTP端口。
8     ProxyPass/consolehttp://localhost:8080/console
9
10     #对所有WASCE 8080端口的访问作出的HTTP回复将只体现IHS的URL
11     ProxyPassReverse/ http:// localhost:8080
12     </IfModule>

 

    保存文件,启动WASCE并且重新启动IHS,在浏览器的地址栏输入http://localhost/console将会看到WAS CE的管理控制台界面:

3. 用IHS帮助WAS CE提高安全性

    SSL (Secure Socket Layer)是Netscape公司开发的一种安全传输协议,用于保证客户端和服务器之间的通信安全。客户端通常可以要对服务器进行身份验证,而服务器有时也对客户端进行鉴权。在身份得到确认之后,SSL负责加密和解密所有HTTPS请求和应答,包括鉴权信息(如用户名和密码)和客户端与服务器交换的所有数据。

    用户可以通过访问https://形式的URL来得到经SSL加密的内容。这样,用户既可以通过http://访问非安全的内容,也可以通过https访问到需要身份验证才能获取的特定内容。

    WASCE本身具有密钥库(keystore)和密钥(key)的配置功能,并且有Certificate Authority用于生成并发布证书,以支持较强的用户身份验证方法。我们可以自定义HTTPS连接器,还可以发布自签名的证书用于测试。用户可以访问8443端口(https://<WASCE_IP>:8443)但是SSL加密势必影响服务器处理其他事务的速度,为此我们可以将这部分的工作交给IHS。

    IHS附带有Key Management Utility工具用于管理密钥和证书。我们就借助这个工具创建自签名证书。

    1)首先我们创建一个新的密钥库文件testkey.kdb:

    2)输入密码并且将保存至文件。默认情况下它被保存到了<IHS_HOME>下的testkey.sth文件。

    3)创建自签名证书。注意,只有在某些测试环境下,才使用自签名证书,否则应该向证书颁发机构(Certificate Authority)申请有效证书。

    · 密钥标签:用于标识这个证书

    · 版本:X509 V3

    · 密钥大小:1024

    · 签名算法:SHA1withRSA

    · 共用名:必须和访问的URL中的主机名相匹配

    · 其他选项为可选。

    事实上Key Management Utility还提供了创建证书请求,接收证书请求,抽取证书等功能。在完成证书的配置之后,还需要修改httpd.conf文件,让IHS使用我们刚才创建的自签名证书。

1     #加载SSL模块
2     LoadModule ibm_ssl_module modules/mod_ibm_ssl.so
3     <IfModule mod_ibm_ssl.c>
4     #在443端口侦听
5     Listen 443
6     #仅作用于443端口上的虚拟主机
7     <VirtualHost *:443>
8     #开启SSL功能
9     SSLEnable
10     KeyFile "c:/Program Files/IBM/IHS7/testkey.kdb"
11     #这一段是配置IHS为WASCE的正向代理和反向代理
12     <IfModule mod_proxy.c>
13     ProxyPass /console http://localhost:8080/console
14     ProxyPassReverse / http://localhost:8080/
15     </IfModule>
16     </VirtualHost>
17     </IfModule>
18     SSLDisable

    保存文件并且重新启动IHS,在浏览器的地址栏输入https://<HOST_NAME>/console,浏览器将弹出安全警报,因为我们使用了不被信任的自签名证书。若要继续访问,在Mozilla FireFox中,我们可以选择添加例外;在Internet Explorer中可以选择继续访问该网站。

4. 集群和负载均衡

    IHS还能帮助WAS CE构成集群环境。集群(cluster)功能可以大幅度提高系统和应用的可用性和可靠性。WAS CE的Web容器Tomcat具备集群功能,它通过在集群中的多点广播(multicast)实现HTTP会话的复制,并且确保一个用户发向某一个节点的后续请求仍然会由同一个节点处理,这被称为session affinity。

    IHS7.0为WAS CE提供了专用的AJP代理模块和均衡模块,位于<IHS_HOME>/modules/ WebSphereCE路径下,以帮助多个WAS CE节点实现负载均衡和失败恢复。Apache Jserv Protocol (AJP)协议用于WAS CE和IHS之间的通信。

    我们将借用WAS CE示例[4]中用于展示Tomcat集群功能的例子,说明WAS CE和IHS分别需要怎样的配置步骤。

    先对本机的WASCE进行配置:

    1)在WASCE的安装目录(<WASCE_HOME>)下新建文件夹instance2,然后将<WASCE_HOME>/var目录复制到instance2文件夹下。

    2)分别修改两个实例的配置文件<WASCE_HOME>/var/config/config-substitutions.properties,例如分别作如下配置:

1     clusterNodeName=node1
2     clusterName=mycluster
3     PortOffset=0

 

1     clusterNodeName=node2
2     clusterName=mycluster
3     PortOffset=10

     这样,两个WAS CE实例分别充当集群mycluster中的节点node1和node2,第二个WAS CE实例的PoetOffset不为0,以避免端口冲突。

    3)分别启动两个WAS CE实例。在启动第二个实例前,首先用set命令设置环境变量(注意命令写在一行):

    set GERONIMO_OPTS = -Dorg.apache.geronimo.server.name=instance2

    其中,instance2是第二个WASCE实例相对于WASCE安装目录的路径。然后用命令geronimo.bat run来启动。

    4)将tomcat-cluster文件夹下的两个Web应用servlet-examples-cluster-server1.war和servlet-examples-cluster-server2.war分别部署在本机的node1和node2实例上。

 

    接下来就要对IHS进行配置。停止IHS并修改httpd.conf:

1     #加载需要的模块
2     LoadModule proxy_module modules/mod_proxy.so
3     LoadModule proxy_ajp_module modules/WebSphereCE/mod_proxy_ajp.so
4     LoadModule proxy_balancer_module modules/WebSphereCE/mod_proxy_balancer.so
5
6     <IfModulemod_proxy.c>
7     #配置名为mycluster的均衡器,两个节点的负载本别是50%。8009和8019分别是两个节点的AJP端口。
8     <Proxybalancer://mycluster>
9     BalancerMemberajp://localhost:8009/servlet-examples-cluster loadfactor=50 route=NODE1
10     BalancerMemberajp://localhost:8019/servlet-examples-cluster loadfactor=50 route=NODE2
11     </Proxy>
12     #用mycluster来处理servlet-examples-cluster这样的URL
13     ProxyPass/servlet-examples-cluster balancer://mycluster/ stickysession=JSESSIONID
14     </IfModule>
15
16     #可以用IHS的balancer-manager来管理这个集群的成员和负载
17     <Location/balancer-manager>
18     SetHandlerbalancer-manager
19     </Location>

    配置完成之后,访问http://localhost/ servlet-examples-cluster,可以看到目前活动的是node1。从servlet-examples-cluster/balancer-manager可以查看这两个节点的情况。若此时结点node1失效,用户对Server1的访问将被重定向至node2。

5. 总结

    总的来说,IHS可以帮助WAS CE提高安全性,并且能帮助WAS CE分担SSL加密和解密的任务,使WAS CE可以专注于事物逻辑和其他事务的处理。另外,IHS能和WAS CE一起完成应用的集群功能,在部署在不同WAS CE节点上的Web应用之间进行负载均衡和失败恢复。

    参考资料:

    [1] IBM WebSphere Application Server文档:

    http://publib.boulder.ibm.com/wasce/V2.1.1/en/index.html

    [2] Apache HTTP Server 2.2文档:http://httpd.apache.org/docs/2.2/

    [3] 在WAS CE中使用数字证书对客户机进行身份验证:

    http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0606_chillakuru/0606_chillakuru.html

    [4] 为WAS CE配置集群环境:

    http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0606_zhangsong/

    [5] WAS CE示例下载:http://download.boulder.ibm.com/ibmdl/pub/software/websphere/wasce/

0
相关文章