IBM HTTP Server集成Liberty

本文介绍如何将IBM HTTP Server (IHS)与IBM Liberty应用服务器集成,包括配置步骤及会话保持实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前2篇分别写了建立Liberty server和安装IBM HTTP Server,下面谈谈如何把IHS和Liberty集成起来。

我们希望搭建一个如下的系统架构
这里写图片描述
客户发起的请求首先会到达web server即IHS(或apache http server), IHS用来负责处理静态资源的请求,比如html,js,css,jpg等,对于动态请求比如jsp,action,do等需要转发至application server进行处理。现在流行的application server有IBM Websphere, Oracle Weblogic, JBOSS, Tomcat, Jetty等。我们这里使用的是IBM轻量级的application server ——Liberty.

1. 针对每台liberty application server生成plugin文件。
可以使用jconsole或者eclipse的方法,这里使用的是eclipse方法
i. 确保 Liberty 服务器已启动。
ii. 在 Eclipse 的“服务器”面板中,右键单击 Liberty 服务器,然后单击实用程序 > 生成插件配置
这里写图片描述
那么plugin-cfg.xml就生成在该usr\servers\ [SERVER NAME]\目录下
这里写图片描述
这是文件的一部分,检查一下端口是否为80,443,如果生成不是的话,后面有会有问题

   <VirtualHostGroup Name="default_host">
      <VirtualHost Name="*:80"/>
      <VirtualHost Name="*:443"/>
   </VirtualHostGroup>

如果只有1台liberty app server,我们就可以修改D:\IBM\HTTPServer\conf\httpd.conf
在conf文件的最后加入以下2行代码

LoadModule was_ap22_module "path\to\mod_was_ap22_http.dll"
WebSpherePluginConfig "path\to\plugin-cfg.xml"

第一行是IHS连接Webshpere/liberty的驱动程序(websphere和liberty的驱动相同),类似于apache的mod_jk.so。这个驱动在安装plug in时生成在
D:\IBM\WebSphere\Plugins_1\bin\32bits 目录中
第二行就是刚才在liberty Utility生成的plugin文件。
把驱动和文件都copy到了HTTPServer的path\to目录里
重启IHS和liberty server,输入应用的URL,通过80端口访问成功!
这里写图片描述

2. 我们这里有2台app server的实例为testserver1和2,那么分别针对这2台生成了plugin-cfg.xml。
将plugin文件合并,可以手工把2个文件合并,也可以用liberty自带的工具merge。
在liberty的bin目录输入命令

pluginUtility merge --sourcePath=..\usr\servers\testserver1\plugincfg.xml,..\usr\servers\testserver2\plugin-cfg.xml

这里写图片描述
2个plugin文件合并完毕,手工把CloseID修改一下为testserver1和2,在默认情况下,IHS的负载均衡的算法是LoadBalance=”Round Robin”在没有其他限定的情况下,为了实现会话保持,IHS会根据用户cookie中传来的CloseID值来判断将用户的请求转发给已经建立了联系的application server。
这里写图片描述
3.修改httpd.conf使其指向合并后的plugin文件

LoadModule was_ap22_module "D:\IBM\WebSphere\Plugins_1\bin\32bits\mod_was_ap22_http.dll"
WebSpherePluginConfig "path/to/merged-plugin-cfg.xml"

重启IHS后,在浏览器输入应用的URL,可以看到
这里写图片描述
在一个jsp页面打印出来了处理请求应用服务器的端口号request.getLocalPort(),可以从testserver1的http.xml文件里看到这个app server的端口是10080,所以知道这个请求被testserver1处理。

<server>

    <featureManager>
        <feature>servlet-3.1</feature>
    </featureManager>

    <!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
    <httpEndpoint host="*" httpPort="10080" httpsPort="10443" id="defaultHttpEndpoint"/>

    <!-- Define the host name for use by the collective.
        If the host name needs to be changed, the server should be
        removed from the collective and re-joined. -->
    <variable name="defaultHostName" value="localhost"/>

    <!--  Used for plugin generation -->
    <pluginConfiguration webserverPort="80" webserverSecurePort="443" />


</server>

不停的刷新页面,可以看到端口在不停的切换
这里写图片描述
IHS把请求轮流转给不同的application server。 但是我们不希望请求是每次轮询转发的,通常我们的开发的web应用都是有状态的,需要实现会话保持,上面提到用CloneID通过cookie来实现,再去看一下app server里的server.xml的配置,这里有

    <!-- <httpSession cloneId="${hostname}_${wlp.server.name}"/>  -->
<httpSession cloneId="${wlp.server.name}"/>

我们把它改为和plugin-cfg.xml里CloneID保持一致(这里我们改为app server的名字,通常是一个9位数以内的字符串)。修改后liberty server会自动加载重启。
我们再看看访问一个jsp页面,即使你不停的刷新,总是11080端口的app server在处理你的请求了,进入Chrome的开发者模式,可以看到Cookie后面有一个:冒号后面的值就是处理你这个请求app server的CloneID。 在首次建立会话时,app server会生成一个带CloneID的cookie传回客户端,再次请求时,客户端会带着此Cookie给IHS,IHS根据此Cookie里CloneID来判断把这个请求转给之前你们已经建立过联系的app server,这样就实现了会话保持。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值