5

我有一个 WAR 应用程序在 Tomcat 的/foo上下文中运行,这意味着它的 URL 是http://example.com:8080/foo. 现在我正在尝试通过mod_jk将 Apache HTTP Server 连接到 Tomcat 。这是我的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>
4

2 回答 2

11

你基本上有两个选择:

  1. 修改 Tomcat 配置以将 WAR 挂载到根目录。这如何完成取决于您部署应用程序的准确程度。这是更清洁的方法,除非有一些阻止因素。
  2. 通过使用 mod_rewrite 将以 / 开头的 URL 重写为 /foo 来处理 Apache 端的问题,此时它将通过您的 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

(这实际上没有经过测试,希望它能按原样工作!)。您可能还需要在 Apache 中启用 mod_rewrite(查看您的发行版,启用 mods 的目录可能是答案)。

如果您需要了解更多关于 mod_rewrite(相当强大的野兽)的信息,请访问: http ://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule

于 2011-03-02T00:32:37.667 回答
0

这是一个Mod重写解决方案

工人财产

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配置文件

<VirtualHost *:80>
   RewriteEngine On
   RewriteRule ^/(.*)/Foo/$1 [PT]
   ServerName example.com             #DOMAIN NAME: "example.com"
   ServerAlias www.example.com
   JkMount /foo/* worker1
 </VirtualHost>
于 2013-10-26T06:25:49.640 回答