Как смонтировать приложение 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 3

2 ответа:

У вас в основном есть два варианта:

  1. измените конфигурацию Tomcat, чтобы установить войну в корне. Как это делается, зависит от того, как именно вы развертываете свое приложение. Это более чистый подход, если только нет какого-то предотвращающего фактора.
  2. решите проблему на стороне 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>