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

相关文章

SQL Server中行转列方法详细讲解

《SQLServer中行转列方法详细讲解》SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集,:本文主要介绍SQLServer中行转列方法的相关资料,需要的朋友可以参考下... 目录前言一、为什么需要行转列二、行转列的基本概念三、使用PIVOT运算符进行行转列1.创建示例数据表并插入数

Spring Boot 集成 mybatis核心机制

《SpringBoot集成mybatis核心机制》这篇文章给大家介绍SpringBoot集成mybatis核心机制,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值... 目录Spring Boot浅析1.依赖管理(Starter POMs)2.自动配置(AutoConfigu

SpringBoot集成iText快速生成PDF教程

《SpringBoot集成iText快速生成PDF教程》本文介绍了如何在SpringBoot项目中集成iText9.4.0生成PDF文档,包括新特性的介绍、环境准备、Service层实现、Contro... 目录SpringBoot集成iText 9.4.0生成PDF一、iText 9新特性与架构变革二、环

JAVA SpringBoot集成Jasypt进行加密、解密的详细过程

《JAVASpringBoot集成Jasypt进行加密、解密的详细过程》文章详细介绍了如何在SpringBoot项目中集成Jasypt进行加密和解密,包括Jasypt简介、如何添加依赖、配置加密密钥... 目录Java (SpringBoot) 集成 Jasypt 进行加密、解密 - 详细教程一、Jasyp

springBoot (springCloud2025)集成redisCluster 集群的操作方法

《springBoot(springCloud2025)集成redisCluster集群的操作方法》文章介绍了如何使用SpringBoot集成RedisCluster集群,并详细说明了pom.xm... 目录pom.XMLapplication.yamlcluster配置类其他配置类连接池配置类Redis

SpringBoot集成WebService(wsdl)实践

《SpringBoot集成WebService(wsdl)实践》文章介绍了SpringBoot项目中通过缓存IWebService接口实现类的泛型入参类型,减少反射调用提升性能的实现方案,包含依赖配置... 目录pom.XML创建入口ApplicationContextUtils.JavaJacksonUt

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty