WebSphere虚拟主机拆分及同上下文根多JVM路由配置方法
嘿,这个需求完全可以实现,我给你一步步拆解配置过程,都是基于你现有单IP单IHS的环境来的:
配置步骤详解
先搞定IBM HTTP Server(IHS)的SSL虚拟主机
打开IHS的主配置文件httpd.conf(或者你单独维护的vhosts.conf,记得用Include把它引入到主配置里),添加下面的虚拟主机配置——每个子域名对应一个独立的<VirtualHost>块,都监听443端口(因为是单IP,IHS会根据请求的Host头区分不同站点):
# 先确保必要的模块已经启用(没启用的话加上) LoadModule ibm_ssl_module modules/mod_ibm_ssl.so LoadModule was_ap24_module modules/mod_was_ap24_http.so # 全局SSL基础配置(如果还没加的话) SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 # app1.mydomain.com 对应的虚拟主机 <VirtualHost *:443> ServerName app1.mydomain.com SSLEnable # 替换成你自己的SSL证书路径,要是用通配符证书的话,三个虚拟主机可以共用一套 SSLCertificateFile "C:/Program Files/IBM/HTTPServer/conf/certs/mydomain_wildcard.crt" SSLCertificateKeyFile "C:/Program Files/IBM/HTTPServer/conf/certs/mydomain_wildcard.key" SSLCertificateChainFile "C:/Program Files/IBM/HTTPServer/conf/certs/root_ca.crt" # 把/myapp路径的请求转发给WebSphere插件处理 <Location /myapp> SetHandler was_handler WebSpherePluginConfig "C:/Program Files/IBM/HTTPServer/conf/plugin-cfg.xml" </Location> </VirtualHost> # app2.mydomain.com 对应的虚拟主机 <VirtualHost *:443> ServerName app2.mydomain.com SSLEnable # 通配符证书的话直接复用上面的路径就行 SSLCertificateFile "C:/Program Files/IBM/HTTPServer/conf/certs/mydomain_wildcard.crt" SSLCertificateKeyFile "C:/Program Files/IBM/HTTPServer/conf/certs/mydomain_wildcard.key" SSLCertificateChainFile "C:/Program Files/IBM/HTTPServer/conf/certs/root_ca.crt" <Location /myapp> SetHandler was_handler WebSpherePluginConfig "C:/Program Files/IBM/HTTPServer/conf/plugin-cfg.xml" </Location> </VirtualHost> # app3.mydomain.com 对应的虚拟主机 <VirtualHost *:443> ServerName app3.mydomain.com SSLEnable SSLCertificateFile "C:/Program Files/IBM/HTTPServer/conf/certs/mydomain_wildcard.crt" SSLCertificateKeyFile "C:/Program Files/IBM/HTTPServer/conf/certs/mydomain_wildcard.key" SSLCertificateChainFile "C:/Program Files/IBM/HTTPServer/conf/certs/root_ca.crt" <Location /myapp> SetHandler was_handler WebSpherePluginConfig "C:/Program Files/IBM/HTTPServer/conf/plugin-cfg.xml" </Location> </VirtualHost>
接着在WebSphere控制台配置主机头路由规则
- 登录WebSphere 9.0的管理控制台,先去服务器 > 服务器类型 > WebSphere应用服务器,找到你的三个JVM:app1、app2、app3。
- 逐个点进去,进入Web容器设置 > Web容器,再点虚拟主机——确保每个服务器对应的虚拟主机(比如默认的
default_host)已经添加了对应子域名的主机别名:- 跳转到环境 > 虚拟主机,选中
default_host,点击主机别名,添加三个条目:app1.mydomain.com:9080、app2.mydomain.com:9081、app3.mydomain.com:9082。
- 跳转到环境 > 虚拟主机,选中
- 再确认下每个JVM的HTTP端口:进入对应服务器的HTTP传输,确保app1是9080,app2是9081,app3是9082,没错就行。
- 最后检查下应用的上下文根:去应用程序 > WebSphere企业应用程序,找到每个JVM上的
myapp,确认上下文根都是/myapp。
生成并调整WebSphere插件配置文件
- 在WebSphere控制台,进入服务器 > 服务器类型 > WebSphere应用服务器 > [对应服务器] > Web服务器插件,点击生成插件。
- 生成好的
plugin-cfg.xml文件,复制到IHS的conf目录下(就是刚才IHS配置里指定的路径)。 - 关键一步:手动编辑
plugin-cfg.xml,添加基于主机头的路由规则,让不同Host头的请求转发到对应JVM。你可以参考下面的配置片段:
<!-- 为每个JVM的/myapp路径创建UriGroup --> <UriGroup Name="app1_URIs"> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/myapp/*"/> </UriGroup> <UriGroup Name="app2_URIs"> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/myapp/*"/> </UriGroup> <UriGroup Name="app3_URIs"> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/myapp/*"/> </UriGroup> <!-- 把每个UriGroup和对应的服务器集群、虚拟主机组绑定 --> <Route ServerCluster="app1_Cluster" UriGroup="app1_URIs" VirtualHostGroup="app1_VHosts"/> <Route ServerCluster="app2_Cluster" UriGroup="app2_URIs" VirtualHostGroup="app2_VHosts"/> <Route ServerCluster="app3_Cluster" UriGroup="app3_URIs" VirtualHostGroup="app3_VHosts"/> <!-- 为每个子域名创建虚拟主机组 --> <VirtualHostGroup Name="app1_VHosts"> <VirtualHost Name="app1.mydomain.com"/> </VirtualHostGroup> <VirtualHostGroup Name="app2_VHosts"> <VirtualHost Name="app2.mydomain.com"/> </VirtualHostGroup> <VirtualHostGroup Name="app3_VHosts"> <VirtualHost Name="app3.mydomain.com"/> </VirtualHostGroup>
提示:这里的app1_Cluster要对应你WebSphere里包含app1 JVM的服务器集群,如果每个JVM是独立的服务器,也可以直接用服务器名称代替集群名,不过用集群更规范。
最后验证配置是否生效
- 重启IHS服务:在Windows 2016的服务列表里找到
IBM HTTP Server 9.0,右键重启。 - 重启WebSphere的三个JVM服务器。
- 测试访问:分别打开
https://app1.mydomain.com/myapp、https://app2.mydomain.com/myapp、https://app3.mydomain.com/myapp,确认每个地址都跳转到对应JVM上的应用。
如果遇到问题,先看IHS的logs/error.log和WebSphere插件的logs/plugin.log,大部分错误都能从日志里找到原因。
内容的提问来源于stack exchange,提问作者falter
相关产品推荐
相关产品推荐

