Tomcat неправильно обслуживает URL с помощью mod_proxy и apache - PullRequest
1 голос
/ 20 января 2010

Я настроил хост с apache для обслуживания статических страниц и использования Tomcat для обслуживания моего веб-приложения (см. этот вопрос ). Статические страницы являются серверами от

"http://myhost.com"

и динамические (tomcat) страницы являются серверами с

"http://myhost.com/myapp"

mod_proxy гарантирует, что «http://myhost.com/myapp" будет перенаправлено на сервер Tomcat, работающий на» http://myhost.com:8080".

Проблема в том, что теперь вы получаете стандартную страницу введения Tomcat по адресу "http://myhost.com/myapp", но если вы щелкнете по локальной ссылке (например," Статус ") слева, она генерирует URL "http://myhost.com/manager/status", в то время как должно генерировать:" http://myhost.com/myapp/manager/status"

(То же самое верно для веб-приложений, установленных под tomcat)

Что нужно изменить в моей конфигурации (apache, tomcat?), Чтобы перенаправить ссылки tomcat в нужное место?

Ответы [ 3 ]

0 голосов
/ 20 января 2010

Вы установили параметр ProxyPassReverse в своем httpd.conf. Это перезапишет заголовок HTTP и вы получите правильный запрос на стороне tomcat.

0 голосов
/ 20 января 2010

У меня был наибольший успех с mod_proxy_ajp. Требуется mod_proxy, но работает поверх ajp. Вместо этого ваш conf-файл выглядит примерно так:

    ProxyPass / ajp://localhost:8009/

См. Мой аналогичный вопрос , а также ответ на этот вопрос . Единственная ошибка в mod_proxy_ajp, которую я обнаружил, заключается в том, что если мне нужно перезапустить tomcat, я должен принудительно перезапустить apache.

0 голосов
/ 20 января 2010

Ваши URL сопоставлены с:

http://myhost.com/myapp -> http://myhost.com:8080

Это означает, что доступ к вышеуказанному URL будет привязан к приложению ROOT в Tomcat. Приложение ROOT создаст страницы, содержащие ссылки из корневого контекста Tomcat.

Другими словами, если вы перейдете на:

http://myhost.com:8080

вы получите страницу, содержащую ссылки на

http://myhost.com:8080/manager/status

Эта ссылка будет работать. Однако когда эта страница возвращается браузеру, который запросил ее через Apache, полный URL-адрес выглядит следующим образом: http://myhost.com/manager/status

Я предполагаю, что вы собираетесь развернуть приложение под названием myapp в Tomcat? В этом случае URL-адрес Tomcat для этого приложения будет

http://myhost.com:8080/myapp

То, что также будет работать, будет правильно отображаться при доступе через Apache.

Если вам абсолютно необходимо получить доступ к корневому приложению Tomcats таким образом, вам придется переписать URL-адреса, которые он выводит на возвращаемых страницах.

...