如何在Weblogic集群上使用Apache代理单页应用程序

时间:2016-09-08 15:09:16

标签: apache mod-rewrite weblogic mod-proxy mod-proxy-balancer

作为升级旧Java应用程序(托管在Weblogic集群上)的一部分,此应用程序的一部分将被单页面应用程序(REACT)取代,通过API调用包含已迁移后端功能的各种服务。目前,在将所有UI依赖关系移植到遗留应用程序之前,REACT SPA仍将托管在JSP页面中(一些常见的JSP代码尚未移植,因此将存在于托管react应用程序的JSP页面上)。 / p>

托管此设置的基础架构当前是Apache服务器,根据需要路由到Weblogic群集或更新的服务。因为所有* .jsp页面都使用简单的weblogic插件块路由到集群,因此之前访问weblogic集群很简单:

 <IfModule mod_weblogic.c>
   WebLogicCluster server1:port,server2:port
   MatchExpression  *.jsp
 </IfModule>

然而,对于新的SPA,我还需要一整套路由来代理包含我的SPA的单个.jsp页面。如果我的目标只是通过路径代理,我可以使用apache weblogic插件轻松解决这个问题:

 <Location /newSection/>
   WLSRequest On
   WebLogicCluster server1:port,server2:port
   PathTrim /newSection/
   PathPrepend SPA.jsp
   DefaultFileName SPA.jsp
 </Location>

但是这仅适用于base / newSection / url,如

之类的网址
http://host/newSection/spa-route

代理

http://host/SPA.jsp/spa-route

显然无效。

没有任何PathTrim,PathPrepend或我为weblogic插件尝试的任何其他内容解决了我试图通过单个URI路径代理的问题(一切都需要代理到http://host/SPA.jsp,SPA路由器处理其余部分)

我正在尝试使用mod_rewrite和mod_proxy,因为RewriteRule [P]允许我代理群集上的单个URI(来自代理平衡器的群集IP)。然而,设置(仍在尝试)要复杂得多,我必须自己实现会话粘性等事情。

如何使用mod_weblogic插件代理特定URI的解决方案会很棒,但是如何使用mod_rewrite,mod_proxy和/或mod_proxy_balancer来实现对weblogic集群上的单个URI的代理的示例将是非常有帮助。

2 个答案:

答案 0 :(得分:1)

原来有一个apache功能(Passthrough)我不知道(或者至少它是如何工作的)可以很好地将Apache重写规则连接到weblogic插件。

RewriteRule /newSection/.*$ /SPA.jsp  [PT,L]

passthrough将URI重写为http://host/SPA.jsp而不进行重写。然后,passthrough通过规则堆栈和其他模块显式传递新URI。此时原始weblogic插件规则我通过MIME类型代理到集群(* .jsp)将获取URI并且工作得很好。

这样Apache负责重写一组特定URI的路径,而weblogic插件很好地处理了其余的事情(代理集群,负载平衡,粘性会话等)。

答案 1 :(得分:0)

以下是使用weblogic插件指导个人网址的方法,您可以根据自己的要求随意更改选项:

创建虚拟主机文件:

<VirtualHost *:80>
        SSLEngine on
        ServerName fqdn
        ServerAlias alias
        ServerAdmin webmaster@localhost
        Header always append X-Frame-Options DENY
        DocumentRoot /var/apache2/htdocs

        <Directory /var/apache2/htdocs>
            Options -Indexes +FollowSymLinks
            AllowOverride None
            Require all granted
        </Directory>

<IfModule mod_weblogic.c>
    debug ERR
    FileCaching on
    WLIOTimeoutSecs 600
    Idempotent ON
    FileCaching ON
    DynamicServerList ON
    KeepAliveEnabled OFF

<Location /newsection>
        SetHandler weblogic-handler
        WebLogicCluster host1:port,host2:port
</Location>
<Location /newsection/SPA.jsp>
        SetHandler weblogic-handler
        WebLogicCluster host3:port,host4:port
</Location>
<Location /SPA.jsp>
        SetHandler weblogic-handler
        WebLogicCluster host5:port,host6:port
</Location>

</IfModule>
</VirtualHost>