Как смонтировать приложение Tomcat с привязкой к контексту с помощью mod_jk?
У меня есть приложение WAR, работающее в Tomcat на /foo
контекст, означающий, что его URL http://example.com:8080/foo
, Сейчас я пытаюсь подключить Apache HTTP Server к Tomcat через mod_jk. Это мое workers.properties
файл:
worker.list=foo
worker.foo.port=8009
worker.foo.host=localhost
worker.foo.type=ajp13
worker.foo.mount=/foo/*
Работает нормально, но по этому адресу: http://example.com/foo
, Я хотел бы, чтобы это было в http://example.com
, Что мне не хватает?
пс. Это мое mod-jk.conf
, который входит в httpd.conf
:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /usr/local/tomcat/conf/workers.properties
<VirtualHost *:80>
ServerName foo.example.com
JkMount /* foo
</VirtualHost>
2 ответа
У вас есть два варианта:
- Измените конфигурацию Tomcat, чтобы смонтировать WAR в корне. Как это сделать, зависит от того, как именно вы развертываете свое приложение. Это более чистый подход, если только нет какого-либо препятствующего фактора.
- Обработайте проблему на стороне Apache, используя mod_rewrite для перезаписи URL, начиная с / to / foo, после чего он будет передан через JkMount в Tomcat
Для второго варианта ваша конфигурация Apache будет выглядеть примерно так:
# Turn on mod_rewrite
RewriteEngine On
# This is the rule. Use regexp to match any URL beginning with /, and rewrite it to
# /foo/remaining_part_of_URL. The [PT] (pass-through) is necessary to make rewritten
# requests go through JkMount
RewriteRule ^/(.*) /foo/$1 [PT]
# Forward all URLs starting with foo to Tomcat
JkMount /foo/* worker
(это на самом деле не проверено, надеюсь, оно работает как есть!). Вам также может понадобиться включить mod_rewrite в вашем Apache (проверьте ваш дистрибутив, ответом может быть каталог с поддержкой модов).
И если вам нужно больше узнать о mod_rewrite (довольно мощный зверь), перейдите сюда: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
Вот Мод Переписать Решение
WORKERS.PROPERTIES
worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.mount=/foo/* #THIS IS THE APP NAME: "FOO"
hTTPD.CONF
<VirtualHost *:80>
RewriteEngine On
RewriteRule ^/(.*)/Foo/$1 [PT]
ServerName example.com #DOMAIN NAME: "example.com"
ServerAlias www.example.com
JkMount /foo/* worker1
</VirtualHost>