【问题标题】:How to mount context-referenced Tomcat application with mod_jk?如何使用 mod_jk 挂载上下文引用的 Tomcat 应用程序?
【发布时间】:2011-02-28 06:26:37
【问题描述】:

我在 Tomcat 中以/foo 上下文运行了一个WAR 应用程序,这意味着它的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。我错过了什么?

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>

【问题讨论】:

    标签: tomcat apache2 mod-jk


    【解决方案1】:

    你基本上有两种选择:

    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

    【讨论】:

    • 我更喜欢第二个选项,主要是因为 Tomcat 中运行着许多应用程序,每个应用程序都在自己的上下文中。您能否举一个在这种特殊情况下使用RewriteRule 的示例?
    • @yegor256 当然,添加了一个示例 Apache mod_rewrite conf
    • 也许您可以帮助解决相关问题:stackoverflow.com/questions/5165781?
    【解决方案2】:

    这是一个 Mod 重写解决方案

    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>
    

    【讨论】:

      猜你喜欢
      • 2019-11-10
      • 2011-04-25
      • 2012-02-26
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      相关资源
      最近更新 更多