Назад | Перейти на главную страницу

Apache не маршрутизируется на tomcat на правильном виртуальном хосте

Мы планируем перейти с Websphere на Tomcat. Я пытаюсь отправить трафик на tomcat с веб-сервера apache на основе директив виртуального хоста на веб-сервере apache.

После некоторой игры у меня это вроде как работает, но я замечаю, что если у меня есть директива JKMount в первом VirtualHost в apache, все virtualHosts будут отправляться на сервер приложений. Если у меня есть JKMount в виртуальных хостах дальше в конфигурациях, то с запросом работает только этот VirtualHost.

Например, с конфигами ниже вот мои симптомы

mysite.com/Webapp1/ -> Я разрешаю соответствующее приложение mysite2.com/Webapp1/ -> Я разрешаю правильное приложение (плохо!) mysite.com/MonitorApp/ -> Я разрешаю правильное приложение mysite2 .com / MonitorApp / -> Я решаю использовать правильное приложение (плохо!) mysite.com/Webapp2/ -> Я НЕ попадаю в приложение (хорошее) mysite2.com/Webapp2/ -> Я разрешаю правильное применение

Вот как выглядят виртуальные хосты моего веб-сервера.

<VirtualHost 255.255.255.1:80>
    ServerName mysite.com
    ServerAlias aliasmysite.ca
##all our rewrite rules
JkMount /Webapp1/* LoadBalanceWorker
JKmount /MonitorApp/* LoadBalanceWorker
</VirtualHost>


<VirtualHost 255.255.255.2:80>
    ServerName mysite2.com
    ServerAlias aliasmysite2.ca
##all our rewrite rules
JkMount /Webapp2/* LoadBalanceWorker
</VirtualHost>

мы запускаем веб-сервер apache 2.2.10 и tomcat 7.0.29 на Solaris10

Я разместил здесь изображение нашей архитектуры. http://imgur.com/IFaA6Rh

Я НЕ определил VirtualHosts на Tomcat. Основываясь на том, что я прочитал, я понимаю, что это необходимо только в том случае, если я напрямую обращаюсь к Tomcat.

Любая помощь приветствуется.

редактировать

Вот мой worker.properties.

worker.list= LoadBalanceWorker,App1,App2

worker.intApp1.port=8009
worker.intApp1.host=10.15.8.8
worker.intApp1.type=ajp13
worker.intApp1.lbfactor=1
worker.intApp1.socket_timeout=30
worker.intApp1.socket_connect_timeout=5000
worker.intApp1.fail_on_status=302,500,503
worker.intApp1.recover_time=30

worker.intApp2.port=8009
worker.intApp2.host=10.15.8.9
worker.intApp2.type=ajp13
worker.intApp2.lbfactor=1
worker.intApp2.socket_timeout=30
worker.intApp2.socket_connect_timeout=5000
worker.intApp2.fail_on_status=302,500,503
worker.intApp2.recover_time=30

worker.LoadBalanceWorker.type=lb
worker.LoadBalanceWorker.balanced_workers=intApp1,intApp2
worker.LoadBalanceWorker.sticky_session=1

Каждый виртуальный хост в Apache «захватывает» запрос, используя ServerName и ServerAlias. В этом случае запрос не обрабатывается другими виртуальными хостами. Таким образом, согласно вашему conf:

  • Запросы с заголовком узла mysite.com или aliasmysite.ca получат доступ только к URI: s / Webapp1 / * и / MonitorApp / *.

  • Точно так же запросы с заголовком хоста mysite2.com или aliasmysite2.ca получат доступ только к URI / Webapp2 / *.

Судя по вашему описанию (которое не совсем понятно) ваших симптомов, я считаю, что эти комбинации не работают, что, следовательно, было бы вполне ожидаемым результатом:

  • mysite2.com/Webapp1/
  • mysite2.com/MonitorApp/
  • mysite.com/Webapp2/

Последний, похоже, был намерен, а первые два - нет. Если это правильно, то вот мое предложение:

<VirtualHost 255.255.255.1:80>
    ServerName mysite.com
    ServerAlias aliasmysite.ca
JkMount /Webapp1/* LoadBalanceWorker
JKmount /MonitorApp/* LoadBalanceWorker
</VirtualHost>

<VirtualHost 255.255.255.2:80>
    ServerName mysite2.com
    ServerAlias aliasmysite2.ca
JkMount /Webapp1/* LoadBalanceWorker
JkMount /Webapp2/* LoadBalanceWorker
JKmount /MonitorApp/* LoadBalanceWorker
</VirtualHost>

Надеюсь, это достаточно ясно, чтобы вести вас, даже если я неверно истолковал ваше описание.

Я не уверен, правильно ли я понимаю вашу архитектуру, но похоже, что у вас есть 2 группы веб-сайтов, которые вы пытаетесь разделить с помощью доменных имен. У вас есть только один рабочий "LoadBalanceWorker". У вас должно быть два работника: один для общедоступных приложений, другой - для приложений сотрудников.