Как использовать 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>
Другие вопросы по тегам