1

所以我在几个 AJP 端口上设置了多个 tomcat 实例,我还有 Apache httpd 在端口 8090 上侦听(因为目前我有另一个应用程序已经在使用 8080)。

我已经使用 Jk Mount 和以下 vhosts 配置成功地将 mydomain.com:8090/demo 和 mydomain.com:8090/preprod 等 URL 映射到它们各自的 tomcat 实例;

<VirtualHost *:8090>
    JkMount /preprod* preprod
    JkMount /demo* demo
</VirtualHost>

但我还希望将“根”地址映射到另一个 tomcat 实例,将变为实时/生产,即我希望 mydomain.com:8090/ 映射第三个 tomcat 实例。

目前,如果我只是在上面的配置中添加一行,什么都不会发生或改变;

JkMount /* rootwar

如果我浏览到 mydomain.com:8090,我只会得到同样无聊的 apache httpd 登录页面,让我知道它正在运行(即 httpd/htdocs 中的 index.html)

是否可以使用 JkMount 将“根”地址重定向到 tomcat 实例?

我可以看到像 /* 这样的规则也将匹配像 mydomain.com/preprod 这样的 URL,但我希望这些规则是按顺序应用的,所以如果 /* 出现在最后,它实际上将是“如果它不是另一个环境,然后直接到根/生产“

为了清楚起见,我正在尝试设置以下内容;

mydomain.com:8090/preprod --> myApp running in tomcat1
mydomain.com:8090/demo    --> myApp running in tomcat2
mydomain.com:8090         --> myApp running in tomcat3
4

3 回答 3

1

好吧,事实证明我对 JkMount 东西的失败行为是正确的,因此像这样的配置;

<VirtualHost *:8090>
    JkMount /preprod* preprod
    JkMount /demo* demo
    JKMount /* root
</VirtualHost>

效果很好,其中带有 /preprod 的 url 进入 tomcat1,/demo 进入 tomcat2,其他任何内容进入 tomcat3 以获取 root。因此,JkMount /* 根行显然是最后尝试的规则,并且只有在没有其他规则与 url 匹配时才“捕获所有”(因为它的 /*)。

伟大的。

于 2011-03-16T11:00:55.863 回答
0

我已经有一段时间没有使用 jk 的东西了,但据我所知,这是不可能的。我们通常通过添加一个重定向到 /root jk 挂载的小 html 页面来解决这个问题。也许使用 mod_rewrite 规则也可能有效。

像这样的东西:

RewriteEngine on
RewriteRule ^/?(.+)$ /root/$1 

也可以使用更复杂的重写规则隐藏重定向,可以在此处找到示例:

http://www.webmasterworld.com/apache/4277304.htm

于 2011-03-11T09:49:59.840 回答
0

好的 - 不是您问题的直接答案,但是......另一种方法是在单独的实例中运行每个演示/预生产和道具,每个实例都在不同的端口上。

这将具有简化配置的优势,但更重要的是,您可以对每个实例进行更改(例如反弹服务器),而不必担心影响生产实例并使其脱机。

Jetty 也非常适合这种情况,尤其是运行快速而肮脏的开发和演示实例......你可以编写一个非常简单的脚本,基本上只是指向一个部署并在某个端口上启动一个码头实例:

public static void run(int port, String resourceBase, String descriptor) {
    Server server = new Server(port);

    WebAppContext context = new WebAppContext();
    context.setResourceBase(resourceBase);
    context.setDescriptor(descriptor);
    context.setContextPath("/");
    context.setParentLoaderPriority(true);
    server.setHandler(context);

    try {
        server.start();
        server.join();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

在哪里

  • resourceBase是 /path/to/webapp
  • 描述符通常是 resourceBase+"/WEB-INF/web.xml"
于 2011-03-13T09:01:08.110 回答