基于IBM HTTP Server与Liberty配置多站点虚拟主机方法咨询
配置IHS+Liberty实现基于域名的多站点路由
这个需求其实是典型的基于名称的虚拟主机反向代理配置,结合IBM HTTP Server(IHS)和Liberty Server的配合就能搞定,我给你分步骤拆解:
第一步:配置Liberty Server,给应用设置独立上下文根
两个应用都部署在同一个Liberty1实例里,首先得给它们分配不冲突的上下文根,确保Liberty能区分请求归属。
编辑Liberty1的server.xml文件(路径:/opt/wlp/usr/servers/liberty1/server.xml),添加或修改应用配置:
<!-- 给abc.war设置上下文根/abc --> <webApplication id="abc-app" location="apps/expanded/abc.war" contextRoot="/abc"/> <!-- 给def.war设置上下文根/def --> <webApplication id="def-app" location="apps/expanded/def.war" contextRoot="/def"/> <!-- 允许Liberty接收外部主机的请求 --> <httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="9080" httpsPort="9443"/> <!-- 配置虚拟主机,允许接收不同域名的Host头 --> <virtualHost id="default_host"> <hostAlias>www.common.com</hostAlias> <hostAlias>*</hostAlias> <!-- 匹配所有其他域名 --> </virtualHost>
保存后重启Liberty1生效:
/opt/wlp/bin/server restart liberty1
第二步:配置IHS,实现域名到应用的路由
IHS作为反向代理,需要通过虚拟主机区分不同域名的请求,再转发到对应的Liberty应用上下文根。
1. 确保代理模块已加载
编辑IHS的httpd.conf文件,确认以下模块已启用(没有的话直接添加):
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so
2. 添加虚拟主机配置
在httpd.conf末尾(或单独的虚拟主机配置文件如vhosts.conf)添加以下配置:
# 处理www.common.com的请求,转发到abc应用 <VirtualHost *:80> ServerName www.common.com # 将根路径请求转发到Liberty的abc上下文根 ProxyPass / http://[Liberty1服务器IP/主机名]:9080/abc/ # 修正重定向URL,确保前端显示的是www.common.com而非Liberty地址 ProxyPassReverse / http://[Liberty1服务器IP/主机名]:9080/abc/ </VirtualHost> # 处理所有其他域名的请求,转发到def应用 <VirtualHost *:80> ServerName default # 如果有特定其他域名,可添加ServerAlias,比如: # ServerAlias www.other.com *.example.com ProxyPass / http://[Liberty1服务器IP/主机名]:9080/def/ ProxyPassReverse / http://[Liberty1服务器IP/主机名]:9080/def/ </VirtualHost>
注意:把
[Liberty1服务器IP/主机名]替换成实际的Liberty服务器地址;如果用HTTPS,把端口改成9443,同时在虚拟主机里添加SSL相关配置(如SSLEngine on、证书路径等)。
保存后重启IHS生效:
# 不同环境重启命令略有差异,示例: apachectl restart # 或 /opt/IBM/HTTPServer/bin/apachectl restart
第三步:测试验证
- 在客户端的
hosts文件(Windows:C:\Windows\System32\drivers\etc\hosts;Linux:/etc/hosts)添加映射:
[IHS服务器IP] www.common.com [IHS服务器IP] www.other.com # 测试用的其他域名
- 打开浏览器访问
http://www.common.com,应该看到abc.war的应用内容;访问http://www.other.com,应该看到def.war的应用内容。
关键注意事项
- 防火墙要开放IHS到Liberty的9080/9443端口,确保请求能正常转发。
- 如果应用有会话(Session)或重定向逻辑,
ProxyPassReverse必须正确配置,否则前端会显示Liberty的原始地址。 - 若需要HTTPS访问,需给IHS配置对应的SSL证书,同时Liberty也可配置SSL(或由IHS终止SSL后转发HTTP到Liberty)。
内容的提问来源于stack exchange,提问作者P Darius
相关产品推荐
相关产品推荐

