У меня есть несколько приложений, развернутых в папке веб-приложений 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"

Вот как я это сделал:
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.1, 1.2, 1.3, 1.4 на # 1 и на # 2. Затем вы создаете 4 определения балансировщиков (например, 1 выше), и в своем VirtualHost вы используете RewriteRule с опцией [P]. К вашему сведению, ответ в порядке, примите его, поставив галочку слева от вопроса :-)
Готово, спасибо, не могли бы вы написать для этого конфигурацию фрагмента? Пожалуйста, мне это нужно. Я отредактировал сообщение, чтобы показать свою попытку.
+1, спасибо, работает хорошо. У меня есть еще один вопрос, может быть, непростой. Я хочу разместить app1.0 + app1.1 на сервере Tomcat # 1 и app1.2 + app1.3 на сервере Tomcat # 2 и сбалансировать эти два сервера Tomcat на основе версии, указанной в конечной точке URL. Это вообще возможно?