作为升级旧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的代理的示例将是非常有帮助。
答案 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>