IBM HTTP Server集成Liberty

2023-11-05 20:50
文章标签 http 集成 server ibm liberty

本文主要是介绍IBM HTTP Server集成Liberty,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前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 beremoved 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,这样就实现了会话保持。
这里写图片描述

这篇关于IBM HTTP Server集成Liberty的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352413

相关文章

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

SQL Server清除日志文件ERRORLOG和删除tempdb.mdf

《SQLServer清除日志文件ERRORLOG和删除tempdb.mdf》数据库再使用一段时间后,日志文件会增大,特别是在磁盘容量不足的情况下,更是需要缩减,以下为缩减方法:如果可以停止SQLSe... 目录缩减 ERRORLOG 文件(停止服务后)停止 SQL Server 服务:找到错误日志文件:删除

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

Spring Boot 集成 Quartz 使用Cron 表达式实现定时任务

《SpringBoot集成Quartz使用Cron表达式实现定时任务》本文介绍了如何在SpringBoot项目中集成Quartz并使用Cron表达式进行任务调度,通过添加Quartz依赖、创... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

JAVA虚拟机中 -D, -X, -XX ,-server参数使用

《JAVA虚拟机中-D,-X,-XX,-server参数使用》本文主要介绍了JAVA虚拟机中-D,-X,-XX,-server参数使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录一、-D参数二、-X参数三、-XX参数总结:在Java开发过程中,对Java虚拟机(JVM)的启动参数进