Балансировщик нагрузки Apache: напрямую к конкретному приложению на основе URL

У меня есть несколько приложений, развернутых в папке веб-приложений Tomcat (app1.0, app1.1, app1.2 и т. д.). Когда я нажимаю www.example.com:8080/app1.0, появляется соответствующее приложение.

Но как это сделать на сервере балансировки нагрузки? Например, у меня есть веб-сайт, на котором я могу нажать кнопку (app1.0, app1.1, app1.2 и т. д.), И появится URL-адрес, например: www.lb.com/app1.0/.../ ... Как перейти к приложению в зависимости от версии приложения в URL-адресе? Использовать RewriteCond и регулярное выражение и передать его в ProxyPass? Я действительно не знаю, как это написать, кто-нибудь может помочь? :)

Обновлено: это то, что я сделал для 2 приложений для 1 Tomcat и 2 приложений для 2 Tomcat, но иногда я получал 404, потому что Tomcat с другой версией был выбран балансировщиком нагрузки.

<VirtualHost *:80>
#Add a http header to explicitly identify the node and be sticky
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

#Declare the http server pool
<Proxy "balancer://plf">
    BalancerMember "http://worker1.com:8080" route=worker1
    BalancerMember "http://worker2.com:8080" route=worker2
    ProxySet stickysession=ROUTEID
    ProxySet lbmethod=bybusyness
</Proxy>

#Common options
ProxyRequests           Off
ProxyPreserveHost       On

#Declare the redirection for the http requests
ProxyPassMatch        "/app(.*)"     "balancer://plf/app$1"  
ProxyPassReverse      "/app(.*)"     "balancer://plf/app$1"

Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
756
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот как я это сделал:

1) определяет прокси балансировщика:

<Proxy balancer://portalcluster stickysession=JSESSIONID>

    BalancerMember ajp://TOMCATSERVER1:8009 route=TOMCARSERVER1-0
    BalancerMember ajp://TOMCATSERVER2:8009 route=TOMCATSERVER2-100

</Proxy>

2) прокси к нему в вашем VirtualHost:

Listen 443
<Virtualhost *:443>
    ServerName example.com

    Alias /static /var/www/portalstatic

    ProxyPass /static !
    ProxyPass / balancer://portalcluster/
    ProxyPassReverse / balancer://portalcluster/

</Virtualhost>

NB Я удалил из них конфигурацию много, которая не связана с вопросом (журналы, запреты, директивы сертификатов, ...). Это просто для иллюстрации того, как я делал прокси.

NB2 Я оставил трюк с /static, так как обычно это то, чем вы захотите заняться. Статические файлы должны оставаться на HTTP, а не отправлять их из Tomcat все время.

+1, спасибо, работает хорошо. У меня есть еще один вопрос, может быть, непростой. Я хочу разместить app1.0 + app1.1 на сервере Tomcat # 1 и app1.2 + app1.3 на сервере Tomcat # 2 и сбалансировать эти два сервера Tomcat на основе версии, указанной в конечной точке URL. Это вообще возможно?

K. Martin 07.09.2018 10:10

да. Для балансировки у вас должно быть по две копии каждой версии. Скажем, 1.1, 1.2, 1.3, 1.4 на # 1 и на # 2. Затем вы создаете 4 определения балансировщиков (например, 1 выше), и в своем VirtualHost вы используете RewriteRule с опцией [P]. К вашему сведению, ответ в порядке, примите его, поставив галочку слева от вопроса :-)

Nic3500 07.09.2018 11:58

Готово, спасибо, не могли бы вы написать для этого конфигурацию фрагмента? Пожалуйста, мне это нужно. Я отредактировал сообщение, чтобы показать свою попытку.

K. Martin 07.09.2018 14:17

Другие вопросы по теме