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

时间:2010-01-19 15:07:28

标签: apache2 weblogic solaris reverse-proxy

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

(细节已更改,但这些是代表性的)

换句话说,可以在

上访问app1

http://serverA:7001/app1/

上的app2

http://serverB:8001/app2/

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

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

有两个应用程序,我需要另一个虚拟主机与另一个位置语句匹配/ app2 /并转发到端口8001上的当前服务器...但我不知道这是如何工作的,因为第一个虚拟主机将有完成SSL协商以确定URL,并且当事情落到第二个虚拟服务器时,Apache可能无法做到这一点。

那我该如何处理呢?

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

这会起作用吗?我是否错过了关于其他方法的明显错误?

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

我将在明天回来时测试并更新问题

2 个答案:

答案 0 :(得分:2)

首先,必读资源当然是官方文档:Installing and Configuring the Apache HTTP Server Plug-In(有关WLS 9插件的更多链接,另请参阅this previous answer。)

Configuring the Apache HTTP Server Plug-In部分所述,我定义了几个IfModule,每个应用程序一个(群集或非群集),实际上还有几个VirtualHost(可以包含{ {1}})。文档中有an example

IfModule

请注意,这是多个基于IP的虚拟主机配置(而不是文档中所述的基于名称的)。但这实际上很好,因为这正是您在使用SSL时所需要的,因为您无法使用基于名称的虚拟主机。从Apache的Why can't I use SSL with name-based/non-IP-based virtual hosts?

引用SSL/TLS Strong Encryption: FAQ
  

原因很技术性,有点“鸡蛋和鸡蛋”的问题。 SSL协议层保持在HTTP协议层之下并封装HTTP。建立SSL连接(HTTPS)时,Apache / mod_ssl必须与客户端协商SSL协议参数。为此,mod_ssl必须参考虚拟服务器的配置(例如,它必须查找密码套件,服务器证书等)。但是为了转到正确的虚拟服务器,Apache必须知道# 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> HTTP头字段。为此,必须读取HTTP请求标头。在SSL握手完成之前无法完成此操作,但需要信息才能完成SSL握手阶段。宾果!

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

答案 1 :(得分:1)

我对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>