2011-02-28 53 views
3

我有一个在Tomcat上运行的WAR应用程序/foo上下文,这意味着它的URL是http://example.com:8080/foo。现在我试图通过mod_jk将Apache HTTP Server连接到Tomcat。这是我的workers.properties文件:如何使用mod_jk加载上下文引用的Tomcat应用程序?

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。我错过了什么?

ps。这是我的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> 

回答

9

你基本上有两种选择:

  1. 修改你的Tomcat配置在根目录下安装WAR。这是如何完成的取决于你如何部署你的应用程序。除非有一些预防因素,否则这是更清洁的方法。
  2. 通过使用mod_rewrite重写URL以/开始/富,此时它会通过你的JkMount被传递到Tomcat

对于第二个选项,您的Apache的配置将处理的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

+0

我更喜欢第二种选择,主要是因为有很多应用程序在Tomcat中运行,每个应用程序都在它自己的上下文中。你能举一个在这种特殊情况下使用'RewriteRule'的例子吗? – yegor256 2011-03-02 06:53:49

+0

@ yegor256好的,加了一个Apache mod_rewrite conf – 2011-03-02 08:57:12

+0

的例子非常感谢!这是我正在寻找的。 – yegor256 2011-03-02 09:32:41

0

这里是一个现代重写解决方案

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> 
相关问题