Как заставить tomcat 5.5 работать за Apache 2 с mod_rewrite, проходящим через запросы к mod_jk и очищающим контекст приложения? - PullRequest
2 голосов
/ 16 октября 2008

Хорошо, поэтому я хочу, чтобы веб-приложение, работающее в tomcat (5.5), работало за Apache 2 (если быть точным, 2.2.3), служащим из корня сайта (т.е. без контекста), с обслуживанием статического контента через apache.

Так что, если приложение работает под "/myapp" на tomcat, я хочу использовать apache (плюс mod_rewrite), чтобы заставить его вести себя так, как будто оно работает под "/".

Mod_jk настроен и работает нормально. Я могу получить доступ к приложению из "/myapp", но не могу заставить работать последний бит. Ниже приведена конфигурация, которую я получил для mod_rewrite, чтобы попытаться заставить это работать. Он корректно получает переписанные /static/ URL-адреса, чтобы заставить apache обслуживать их из распакованного веб-приложения, и если я включаю журнал перезаписи, я вижу, что он пытается передать все другие запросы на /myapp через mod_jk. Однако, похоже, что mod_jk не обрабатывает запрос впоследствии.


JkMount /myapp/*      worker1

RewriteEngine On

# ensure static stuff gets served by apache
RewriteRule ^/static/(.*)$ /var/lib/tomcat5.5/webapps/myapp/static/$1 [L]
# everything else should go through tomcat
RewriteRule ^/(.*)$ /myapp/$1 [L,PT]

Когда я делал это с Apache 1 в прошлом, я должен был убедиться, что mod_jk get загружен до mod_rewrite, но я не могу достичь этого в Apache 2. Есть мысли? Как другие люди обычно делают это?

Ответы [ 4 ]

1 голос
/ 24 ноября 2008

Может быть лучше использовать Apache для прокси вместо mod_jk. Примерно так:

ProxyPass / статический / http://localhost:8080/myapp/static/

1 голос
/ 16 октября 2008

удалось получить это работает в конце концов. Похоже, мне нужно установить JkOption на:


JkOptions     +ForwardURICompat

А затем mod_jk просматривает переписанный URL. Должен признать, что не на 100% уверен, почему это работает, но я верю, что он возвращается к более старой форме поведения. Если бы кто-нибудь мог сказать мне лучший / более правильный способ сделать это, я хотел бы знать.

0 голосов
/ 20 октября 2008

Может быть проще или прозрачнее, что произойдет, если вы используете виртуальные хосты Tomcat или разные коннекторы для разных хостов и просто развернете корневые приложения (в "/") и настроите перенаправление Apache mod_jk на разные коннекторы или виртуальные хосты.

Примечание. Когда мне это было нужно, я работал с разными коннекторами для разных хостов tomcat или двигателей (не помню) и развернул ROOT-приложения. Я никогда не пробовал виртуальные хосты (на основе имени) в tomcat, только предполагая, что это может сработать.

Преимущество: нет перевода пути, поэтому намного легче понять, как только вы вносите изменения в установочные месяцы после первоначального развертывания.

Признаюсь, это звучит несколько странно, но польза от читабельности для меня очень важна.

0 голосов
/ 16 октября 2008

Мы используем флаг 'R' вместо 'PT':

RewriteRule ^/(.*)$ /myapp/$1 [L,R]

Edit: Я упустил момент, чтобы не изменять URL-адрес, который видит пользователь. Альтернативный способ сделать это:

JkMount /* worker1
JkUnmount /static/* worker1

Тогда вам не понадобится RewriteRule.

И согласно Apache Tomcat Site новые настройки по умолчанию mod_jk несовместимы с mod_rewrite, и вы должны использовать +ForwardURICompatUnparsed.

...