使用weblogic代理和Apache2将https请求重定向到两个不同的weblogic服务器

使用weblogic代理和Apache2将https请求重定向到两个不同的weblogic服务器,apache2,weblogic,solaris,reverse-proxy,Apache2,Weblogic,Solaris,Reverse Proxy,我有一台服务器serverA运行weblogic应用程序App1,端口7001上有基本url/App1/,另一台服务器serverB运行weblogic应用程序App2,端口8001上有基本url/App2/。两台服务器都运行Solaris、Apache2和Weblogic 9.2 (细节已更改,但具有代表性) 换句话说,app1可以在上访问 附件二 但是,客户要求所有对应用程序的访问都在server1的端口443上使用https 如果只有一个应用程序,我可以使用虚拟主机,将以/app1/开

我有一台服务器serverA运行weblogic应用程序App1,端口7001上有基本url/App1/,另一台服务器serverB运行weblogic应用程序App2,端口8001上有基本url/App2/。两台服务器都运行Solaris、Apache2和Weblogic 9.2

(细节已更改,但具有代表性)

换句话说,app1可以在上访问

附件二

但是,客户要求所有对应用程序的访问都在server1的端口443上使用https

如果只有一个应用程序,我可以使用虚拟主机,将以/app1/开头的URL的处理程序设置为Weblogic代理,这将把它们转发到端口7001上的服务器1

如果有两个应用程序,我需要另一个虚拟主机,它的另一个位置语句与/app2/匹配,并转发到端口8001上的当前服务器。。。但我不明白这是怎么回事,因为第一个虚拟主机将完成SSL协商以确定URL,而Apache可能无法在第二个虚拟服务器出现问题时完成这项工作

那我该怎么处理呢

我目前的想法是将在server1上到达的所有SSL请求代理到端口80上的同一服务器server1(因此基本上只是执行SSL终止),然后以上述方式为/app1/和/app2/url添加两个虚拟主机

这样行吗?我是否错过了其他方法的一些明显之处

编辑:我想我可能错过了Weblogic插件可以有几个块,每个块将页面指向不同的位置。在这种情况下,这变得很容易


明天回去工作时我会进行测试并更新问题

我没有任何weblogic经验,所以可能我遗漏了一些重要的东西。但这听起来像是apache反向代理功能的简单应用程序。设置一个服务https的apache实例,并按如下方式配置两个位置:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<Location /app1>
    ProxyPass http://serverA:7001/app1
    ProxyPassReverse http://serverA:7001/app1
</Location>
<Location /app2>
    ProxyPass http://serverB:8001/app2
    ProxyPassReverse http://serverB:8001/app2
</Location>
LoadModule proxy\u modules/mod\u proxy.so
LoadModule proxy\u http\u module modules/mod\u proxy\u http.so
ProxyPasshttp://serverA:7001/app1
ProxyPassReversehttp://serverA:7001/app1
ProxyPasshttp://serverB:8001/app2
ProxyPassReversehttp://serverB:8001/app2

首先,这篇文章的必读资源当然是官方文档:(另请参阅有关WLS 9插件的更多链接)

如本节所述,我将定义几个
IfModule
,每个应用程序一个(集群或非集群),实际上还有几个
VirtualHost
(可以包括
IfModule
)。文件中有:

#VirtualHost1=localhost:80
DocumentRoot“C:/test/VirtualHost1”
ServerName本地主机:80
#... WLS参数。。。
WebLogicCluster本地主机:7101,本地主机:7201
#示例:MatchExpression*.jsp
MatchExpression*.jsp路径前缀=/test2
#虚拟主机2=127.0.0.2:80
DocumentRoot“C:/test/VirtualHost1”
服务器名127.0.0.2:80
#... WLS参数。。。
WebLogicCluster本地主机:7101,本地主机:7201
#示例:MatchExpression*.jsp
MatchExpression*.jsp路径前缀=/test2
#... WLS参数。。。
请注意,这是一种基于多IP的虚拟主机配置(而不是文档中所述的基于名称)。但这实际上很好,因为这正是使用SSL时需要的,因为您不能使用基于名称的虚拟主机。引用Apache的

原因是非常技术性的,有点“鸡和蛋”的问题。SSL协议层位于HTTP协议层之下并封装HTTP。当建立SSL连接(HTTPS)时,Apache/mod_SSL必须与客户端协商SSL协议参数。为此,mod_ssl必须参考虚拟服务器的配置(例如,它必须查找密码套件、服务器证书等)。但是为了转到正确的虚拟服务器,Apache必须知道
Host
HTTP头字段。为此,必须读取HTTP请求头。这在SSL握手完成之前无法完成,但需要这些信息才能完成SSL握手阶段。宾果


因此,在上面的示例中,修改虚拟主机IP地址和端口,
ServerName
,调整IfModule以满足您的需要(并将DNS条目设置为指向IP),然后就可以了。

我认为问题在于SSL的使用。否则,您的解决方案将起作用。我还必须使用weblogic代理,而不仅仅是重定向(server1和server2实际上是weblogic集群),谢谢。巧合的是,昨晚我在发布问题后发现了那个文档(我的谷歌fu以前一定很弱),但是你确认这个方法是我需要的是很有价值的。
# VirtualHost1 = localhost:80
<VirtualHost 127.0.0.1:80>
  DocumentRoot "C:/test/VirtualHost1"
  ServerName localhost:80 <IfModule mod_weblogic.c> 
  #... WLS parameter ...
  WebLogicCluster localhost:7101,localhost:7201
  # Example: MatchExpression *.jsp <some additional parameter>
  MatchExpression *.jsp PathPrepend=/test2
  </IfModule>
</VirtualHost>

# VirtualHost2 = 127.0.0.2:80
<VirtualHost 127.0.0.2:80>
  DocumentRoot "C:/test/VirtualHost1"
  ServerName 127.0.0.2:80
  <IfModule mod_weblogic.c> 
  #... WLS parameter ...
  WebLogicCluster localhost:7101,localhost:7201
  # Example: MatchExpression *.jsp <some additional parameter>
  MatchExpression *.jsp PathPrepend=/test2
  #... WLS parameter ...
  </IfModule>
</VirtualHost>    <IfModule mod_weblogic.c>