IBM HTTP Server 是基于 Apache HTTP Server 的 Web 服务器。它负责处理来自客户端的 HTTP 请求,并向它们发送相应的 HTTP 应答。通常, IBM HTTP Server 被用来处理静态内容,包括 HTML 页面和 Applet 等,因此经常为应用服务器提供辅助功能。在此,将 IBM HTTP Server (以下简称 IHS )和 WebSphere Application Server Community Edition (以下简称 WASCE ) 配合使用有下几个益处:
IHS 为 WASCE 进行 URL 代理 IHS 为 WASCE 承担 SSL 加密解密任务 IHS 处理静态页面,从而使 WASCE 可以专注于处理动态页面,例如 JSP 和 Servlet 。 两者协作实现集群和负载均衡.
与 WebSphere 应用服务器( WebSphere Application Server )内置了 IBM HTTP Server , 并且包含 IHS 的管理控制台不同,为了使 WASCE 能与 IHS 协调工作,必须要做一些配置工作。本文将以 WASCE 2.1.1.2 和 IHS 7.0 为例,讨论在Windows XP平台上如何对它们进行配置,以帮助 WASCE 提高多方面的性能。
1. IBM HTTP Server 的基本配置
IHS 的主要配置保存在 /conf ( 为 IHS 的安装目录 ) 文件夹下的 httpd.conf 文件中。配置文件的每一行包含一个指令,注释以 # 开头。通常 IHS 有如下一些默认的配置:
# 服务器的根目录,此处仅为举例 ServerRoot "C:/Program Files/IBM/IHS7"
# 在80端口侦听 Listen 0.0.0.0:80
# 用户能访问的文件根目录,默认为服务器安装目录下的htdocs文件夹 DocumentRoot "C:/Program Files/IBM/IHS7/htdocs"
# DocumentRoot文件夹的访问控制
# 允许在此目录中使用符号连接。如果一个映射到目录的URL被请求,而此目录中又没有 index.html等索引页面,那么服务器会返回一个格式化后的目录列表。 Options Indexes FollowSymLinks # 禁止使用.htaccess文件 AllowOverride None # 规定allow和deny的优先级次序 Order allow,deny # 允许所有用户访问DocumentRoot Allow from all |
IHS 是一个模块化的服务器,我们可以通过配置文件中对服务器包含的模块进行功能增减。除了核心模块之外的多数模块都可以通过 httpd.conf 文件中 指令进行动态加载。如果需要用某个特定的模块存在与否来决定是否作出某些配置的时候。指令一般都放在 指令段中。例如:
# 加载status_module模块,它位于ServerRoot下modules文件夹 LoadModule status_module modules/mod_status.so
# 如果status模块被加载,则请求状态的扩展信息
ExtendedStatus On |
通常我们还需要用 等指令来指定服务器的主机名和端口号,让 IHS 能够辨识自己,并提高可靠性。在本文中,我们仅针对本机进行部署和测试,因此对于主机名的配置,在此不作赘述。默认情况下,本机的 IHS 启动之后,在浏览器中访问 http://localhost, 会看到如下的结果:
2. 把 WASCE 隐藏在 IHS 之后
在本机安装 WASCE 之后,其管理控制台 (Administrative Console) 的地址为 http://localhost:8080. 可以想象一个远端的客户端并不想以一个类似 http://:8080 的地址来访问 WASCE, 为什么不是 http:// 或者 http://? 为了解决这个问题,我们可以借助 IHS 的正向和反向代理功能。 IHS 的正向代理功能可以将 WASCE 的地址映射到 IHS 的 URL 空间,帮助客户端访问远程的 WASCE (无论 WASCE 和 IHS 是否在一台物理主机上),也能用于缓冲数据,以降低 IHS和WASCE之间的负载。 反向代理能 调整由 IHS 发送给客户端的 HTTP 回应头中的 URL , 让WASCE上的页面看起来像是存在于IHS上一样,从而隐藏了WASCE的IP地址,主机名和端口号。在停止IHS之后,对 httpd.conf 作如下的配置:
# 加载代理模块和HTTP代理模块 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so
<IfModule mod_proxy.c> # 将WASCE的服务器下/console映射到IHS空间中,若WASCE不在本机,localhos # 应为WASCE的IP地址或可识别的主机名,8080为WASCE的HTTP端口。 ProxyPass /console http://localhost:8080/console
# 对所有WASCE 8080端口的访问作出的HTTP回复将只体现 IHS的URL ProxyPassReverse / http:// localhost:8080 IfModule> |
保存文件,启动 WASCE 并且重新启动 IHS ,在浏览器的地址栏输入 http://localhost/console 将会看到 WASCE 的管理控制台界面:
3. 用 IHS 帮助 WASCE 提高安全性
SSL (Secure Socket Layer) 是 Netscape 公司开发的一种安全传输协议,用于保证客户端和服务器之间的通信安全。客户端通常可以要对服务器进行身份验证,而服务器有时也对客户端进行鉴权。在身份得到确认之后, SSL 负责加密和解密所有 HTTPS 请求和应答,包括鉴权信息(如用户名和密码)和客户端与服务器交换的所有数据。
用户可以通过访问https://形式的URL来得到经SSL加密的内容。这样,用户既可以通过http://访问非安全的内容,也可以通过https访问到需要身份验证才能获取的特定内容。
WASCE本身具有密钥库(keystore)和密钥(key)的配置功能,并且有Certificate Authority用于生成并发布证书,以支持较强的用户身份验证方法。我们可以自定义HTTPS连接器,还可以发布自签名的证书用于测试。用户可以访问8443端口(https://:8443)但是SSL加密势必影响服务器处理其他事务的速度,为此我们可以将这部分的工作交给IHS。
IHS附带有Key Management Utility工具用于管理密钥和证书。我们就借助这个工具创建自签名证书。
<!--[if !supportLists]--> <!--[endif]--> <!--[if !supportLists]--> 1) <!--[endif]--> 首先我们创建一个新的密钥库文件 testkey.kdb:<!--[if !supportLists]-->2) <!--[endif]-->输入密码并且将保存至文件。默认情况下它被保存到了下的testkey.sth文件.
<!--[if !supportLists]-->3) <!--[endif]-->创建自签名证书。注意,只有在某些测试环境下,才使用自签名证书,否则应该向证书颁发机构 (Certificate Authority) 申请有效证书。
- 密钥标签: 用于标识这个证书
- 版本:X509 V3
- 密钥大小: 1024
- 签名算法: SHA1withRSA
- 共用名: 必须和访问的URL中的主机名相匹配
- 其他选项为可选。
事实上 Key Management Utility 还提供了创建证书请求,接收证书请求,抽取证书等功能。
在完成证书的配置之后,还需要修改 httpd.conf 文件,让 IHS 使用我们刚才创建的自签名证书。
# 加载SSL模块 LoadModule ibm_ssl_module modules/mod_ibm_ssl.so
# 在443端口侦听 Listen 443 # 仅作用于443端口上的虚拟主机
# 开启SSL功能 SSLEnable KeyFile "c:/Program Files/IBM/IHS7/testkey.kdb"# 这一段是配置IHS为WASCE的正向代理和反向代理
ProxyPass /console http://localhost:8080/console ProxyPassReverse / http://localhost:8080/
SSLDisable |
保存文件并且重新启动 IHS ,在浏览器的地址栏输入 https:///console, 浏览器将弹出安全警报,因为我们使用了不被信任的自签名证书。若要继续访问, 在 Mozilla FireFox 中,我们可以选择添加例外;在 Internet Explorer 中可以选择继续访问该网站。
4. 集群和负载均衡
IHS还能帮助WASCE构成集群环境。集群 (cluster) 功能可以大幅度提高系统和应用的可用性和可靠性。 WASCE的Web容器Tomcat具备集群功能,它通过在集群中的多点广播 (multicast) 实现HTTP会话的复制,并且确保一个用户发向某一个节点的后续请求仍然会由同一个节点处理, 这被称为session affinity。
IHS7.0为WASCE提供了专用的AJP代理模块和均衡模块,位于/modules/ WebSphereCE路径下,以帮助多个WASCE节点实现负载均衡和失败恢复。Apache Jserv Protocol (AJP) 协议用于WASCE和IHS之间的通信。
我们将借用WASCE示例[4]中用于展示Tomcat集群功能的例子, 说明WASCE和IHS分别需要怎样的配置步骤。
先对本机的WASCE进行配置:
1) 在WASCE的安装目录()下新建文件夹instance2, 然后将/var目录复制到instance2文件夹下。
2) 分别修改两个实例的配置文件/var/config/config-substitutions.properties,例如分别作如下配置:
clusterNodeName=node1 clusterName=mycluster PortOffset=0 |
clusterNodeName=node2 clusterName=mycluster PortOffset=10 |
3) 分别启动两个WASCE实例。在启动第二个实例前,首先用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:
# 加载需要的模块 LoadModule proxy_module modules/mod_proxy.so
<IfModule mod_proxy.c> # 配置名为mycluster的均衡器, 两个节点的负载本别是50%。8009和8019分别是两个节点的AJP端口。 <Proxy balancer://mycluster> BalancerMember ajp://localhost:8019/servlet-examples-cluster loadfactor=50 route=NODE2 Proxy> # 用 mycluster来处理servlet-examples-cluster 这样的URL ProxyPass /servlet-examples-cluster balancer://mycluster/ stickysession=JSESSIONID IfModule>
# 可以用IHS的balancer-manager来管理这个集群的成员和负载 <Location /balancer-manager> |
配置完成之后,访问http://localhost/ servlet-examples-cluster, 可以看到目前活动的是node1。从servlet-examples-cluster/balancer-manager可以查看这两个节点的情况。若此时结点node1失效,用户对Server1的访问将被重定向至node2。
5. 总结
总的来说,IHS可以帮助WASCE提高安全性,并且能帮助WASCE分担SSL加密和解密的任务,使WASCE可以专注于事物逻辑和其他事务的处理。另外,IHS能和WASCE一起完成应用的集群功能,在部署在不同WASCE节点上的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] 在WASCE中使用数字证书对客户机进行身份验证:
http://www.ibm.com/developerworks/cn/websphere/library/techarticles
/0606_chillakuru/0606_chillakuru.html
[4] 为WASCE配置集群环境:
http://www.ibm.com/developerworks/cn/websphere/library/techarticles
/0606_zhangsong/
[5] WASCE示例下载:http://download.boulder.ibm.com/ibmdl/pub
/software/websphere/wasce/
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21588830/viewspace-594872/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21588830/viewspace-594872/