2010-04-09 7 views
4

У меня проблема с настройкой директивы ProxyPass apache tomcat для двух приложений, которые имеют два разных Контекстных пути в tomcat. Tomcat работает за apache, и я использую apache для прокси-сервера для запросов к tomcat. В apache я хочу получить доступ к обоим приложениям через имя хоста вместо контекста.Apache - Tomcat ProxyPass VirtualHost - Контекстный путь

Сценарий:

кот

https://domain:8443/app1 
https://domain:8443/app2 

в коте приложения имеют контекст путь APP1 и app2

в апача Я хочу, чтобы включить оба приложения следующим образом:

https://app1.host/ 
https://app2.host/ 

В apache я создал конфигурацию для каждого домена:

ProxyPass/https://localhost:8443/app1 
ProxyPassReverse/https://localhost:/8443/app1 

Странная вещь app1 доступна только через апач, используя контекстный путь:

https://app1.host/app1 

Можно ли реализовать такую ​​установку с модулем Apache ProxyPass?

Thx для вашей помощи.

ответ

10

Вы должны иметь возможность добиться желаемого результата с помощью виртуального хостинга. Также неплохо передать запросы на tomcat через протокол AJP вместо HTTPS. Попробуйте добавить это к конфигурации Apache

NameVirtualHost *:443 

<VirtualHost *:443> 
    ServerName app1.host 
    ProxyPass/ajp://localhost:8009/app1/ 
</VirtualHost> 

<VirtualHost *:443> 
    ServerName app2.host 
    ProxyPass/ajp://localhost:8009/app2/ 
</VirtualHost> 

Если вы не изменили настройки сервера по умолчанию для Tomcat это должно работать так же, как это. В противном случае обязательно укажите порт AJP, который настроен в файле conf/server.xml Tomcat. Там должна быть линия похожа на это:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 

Убедитесь, что у вас есть mod_proxy и mod_proxy_ajp модули загружены в конфигурации Apache, это может варьироваться в зависимости от установки Apache. Также удалите все ранее настроенные строки «ProxyPass/...», поскольку они будут мешать новой конфигурации. Надеюсь, что это работает для вас.

+1

При использовании сеансов Tomcat, Tomcat будет устанавливать куки JSESSIONID с пути/App1 (или/app2). Однако браузер видит URLS на основе «/», поэтому не будет проходить cookie идентификатора сеанса. Вам также нужно будет добавить «ProxyPassReverseCookiePath/app1 /» (см .: http://www.humboldt.co.uk/2009/02/the-mystery-of-proxypassreverse.html) –

6

вы можете попробовать

ProxyPass/https://localhost:8443/app1/ 
ProxyPassReverse/https://localhost:8443/app1/ 

с окончательным/

+1

Можете ли вы добавить немного больше информации пожалуйста? – durron597