确定
所以我在几个AJP端口上设置了多个tomcat实例,我还在端口8090上监听了Apache httpd(因为我现在已经有另一个应用程序使用了8080)。
我已经使用Jk Mount和以下vhosts配置成功地将mydomain.com:8090/demo和mydomain.com:8090/preprod等网址映射到各自的tomcat实例;
<VirtualHost *:8090>
JkMount /preprod* preprod
JkMount /demo* demo
</VirtualHost>
但我也希望“root”地址映射到另一个tomcat实例,什么将成为live / production,即我希望mydomain.com:8090/映射第三个tomcat实例。
如果我只是在上面的配置中添加一行,那么当前没有任何反应或改变;
JkMount /* rootwar
如果我浏览到mydomain.com:8090我只是得到了同样无聊的apache httpd登陆页面让我知道它的运行(即httpd / htdocs中的index.html)
是否可以使用JkMount将“root”地址内容重定向到tomcat实例?
我可以看到像/ *这样的规则也会匹配像mydomain.com/preprod这样的网址,但是我希望这些规则按顺序应用,所以如果/ *出现在最后它实际上会是“如果它不是一个其他环境,然后直接到root / production“
为了清楚起见我正试图设置以下内容;
mydomain.com:8090/preprod --> myApp running in tomcat1
mydomain.com:8090/demo --> myApp running in tomcat2
mydomain.com:8090 --> myApp running in tomcat3
答案 0 :(得分:1)
好的,事实证明我对JkMount内容的堕落是正确的,因此配置就像;
<VirtualHost *:8090>
JkMount /preprod* preprod
JkMount /demo* demo
JKMount /* root
</VirtualHost>
工作得很好,带有/ preprod的urls到tomcat1,/ demo进入tomcat2,其他任何东西都转到tomcat3 for root。因此,JkMount / *根行显然是最后一个尝试过的规则,如果没有其他规则与url匹配,则只能“捕获所有”(cos / *)。
大
答案 1 :(得分:0)
我暂时没有使用jk的东西,但据我记得这是不可能的。我们通常通过添加一个重定向到/ root jk mount的小html页面来解决这个问题。也许使用mod_rewrite规则也可能有用。
这样的事情:
RewriteEngine on
RewriteRule ^/?(.+)$ /root/$1
也可以使用更复杂的重写规则隐藏重定向,可以在此处找到一个示例:
答案 2 :(得分:0)
好的 - 不是你的问题的直接答案,但......另一种方法是在不同的实例中运行每个demo / preprod和prop,每个实例位于不同的端口上。
这样可以简化您的配置,但更重要的是,您可以对每个实例进行更改(例如,弹回服务器),而不必担心影响生产实例并使其脱机。
Jetty也非常适合这样的情况,特别是对于运行快速和脏的开发和演示实例....你可以编写一个非常简单的脚本,基本上只指向部署并在其上启动一个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();
}
}
其中