Как смонтировать приложение 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/*
Работает нормально, но по этому URL: 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, чтобы установить войну в корне. Как это делается, зависит от того, как именно вы развертываете свое приложение. Это более чистый подход, если только нет какого-то предотвращающего фактора.
- решите проблему на стороне 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#rewriterule
Вот решение переписать мод
Рабочие.Свойства
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>