Как использовать Apache для прокси для одностраничного приложения в Weblogic Cluster
В рамках обновления унаследованного Java-приложения (размещенного в кластере Weblogic) один раздел этого приложения будет заменен одностраничным приложением (REACT), обращаясь через API к различным службам, которые содержат перенесенные функции внутреннего интерфейса. Пока, пока все зависимости пользовательского интерфейса не будут перенесены из унаследованного приложения, REACT SPA будет по-прежнему размещаться на странице JSP (некоторый общий код JSP не был перенесен, и поэтому будет присутствовать на странице JSP, на которой размещено приложение реагирования).
Инфраструктура, на которой размещены эти настройки, в настоящее время представляет собой сервер Apache, маршрутизирующий к кластеру Weblogic или новым сервисам по мере необходимости. Проксирование в кластер weblogic было простым до того, как все *.jsp страницы были перенаправлены в кластер с помощью простого блока плагинов weblogic:
<IfModule mod_weblogic.c>
WebLogicCluster server1:port,server2:port
MatchExpression *.jsp
</IfModule>
Однако с новым SPA мне также нужен целый набор маршрутов для прокси на одной странице.jsp, содержащей мой SPA. Если бы моей целью было только прокси по пути, я мог бы легко решить эту проблему с помощью плагина apache weblogic:
<Location /newSection/>
WLSRequest On
WebLogicCluster server1:port,server2:port
PathTrim /newSection/
PathPrepend SPA.jsp
DefaultFileName SPA.jsp
</Location>
Однако это работает только для base /newSection/ url, как 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-адрес кластера от Proxy Balancer). Однако это гораздо сложнее настроить (все еще пытаясь), и я должен сам реализовать такие вещи, как липкость сессий.
Было бы неплохо решить, как использовать плагин mod_weblogic для прокси для определенного URI, но примеры того, как использовать mod_rewrite, mod_proxy и / или mod_proxy_balancer для достижения этого прокси на один URI в кластере weblogic, были бы чрезвычайно полезны, так как Что ж.
2 ответа
Оказывается, была функция Apache (Passthrough), о которой я не знал (или, по крайней мере, как именно она работает), которая может красиво соединить правила переписывания Apache с плагином weblogic.
RewriteRule /newSection/.*$ /SPA.jsp [PT,L]
Проход переписывает URI в http://host/SPA.jsp БЕЗ перезаписи. Затем этот проход явно передает этот новый URI обратно через стек правил и другие модули. На этом этапе исходное правило плагина weblogic, которое я имел, заключалось в том, что прокси-серверы по типу MIME для кластера (*.jsp) будут подбирать URI и работать нормально.
Таким образом, Apache заботится о переписывании набора путей к определенному URI, а плагин weblogic прекрасно заботится обо всем остальном (проксирование к кластеру, балансировка нагрузки, липкие сессии и т. Д.)
Вот как вы используете плагин weblogic для направления отдельных URL, не стесняйтесь изменять параметры в соответствии с вашими требованиями:
Создайте файл виртуального хоста:
<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>