【发布时间】:2012-05-16 15:01:11
【问题描述】:
是否可以为单个 Web 应用程序指定多个上下文路径? 例如,我有一个在端口 8080 上运行的 tomcat 应用程序 myapp。我想在前面使用 apache,以便 localhost/app1 或 localhost/app2 都被路由到 tomcat 中的 myapp 如何实现这一点?我不想使用重定向
【问题讨论】:
标签: tomcat
是否可以为单个 Web 应用程序指定多个上下文路径? 例如,我有一个在端口 8080 上运行的 tomcat 应用程序 myapp。我想在前面使用 apache,以便 localhost/app1 或 localhost/app2 都被路由到 tomcat 中的 myapp 如何实现这一点?我不想使用重定向
【问题讨论】:
标签: tomcat
没有。无法为同一个应用程序定义 2 条路径。您可以为同一个 WAR 指定 2 个路径,但它仍然是同一个应用程序的 2 个实例。
但是,您可以将应用程序定义为 ROOT 并检查代码中的路径。例如,将您的应用程序放在 webapps/ROOT 中并将此逻辑添加到您的 servlet,
String path = request.getPathInfo();
if (path.indexOf("/app1") >= 0)
app1(request, response);
else if (path.indexOf("/app2") >= 0)
app2(request, response);
【讨论】:
是的,您可以在 Apache Web 服务器设置上执行此操作。此选项与 Tomcat 无关。您可以对 Apache Web Server 后面的任何应用程序服务器执行此操作,无论是 Tomcat、Jetty,甚至是另一个运行 PHP 脚本或静态页面的 Apache Web Server。
实际设置取决于您使用哪种方法将 Apache Web Server 连接到 Tomcat。
例如,如果您使用 mod_proxy,配置将如下所示:
ProxyPass /app1 http://192.168.11.25:8080/myapp
ProxyPassReverse /app1 http://192.168.11.25:8080/myapp
ProxyPass /app2 http://192.168.11.25:8080/myapp
ProxyPassReverse /app2 http://192.168.11.25:8080/myapp
我刚刚在我的机器上尝试了上述设置,以在 2 个不同的前端 URL 中公开相同的 WebDAV Subversion。
您的应用程序是否真的支持这一点,那就是另一回事了。如果您的应用程序需要指定前端 URL,并且您正在使用 mod_proxy,例如安装像 Atlassian Confluence 这样的应用程序,这根本不起作用。如果您的应用程序不需要它,那就太好了。
但您始终可以通过创建复杂的 URL 重写 (mod_rewrite) 来降低级别,该方法也应该能够解决该问题。
您需要注意的另一件事是您的应用程序处理会话、URL、原始 IP 地址等的方式。如果它不支持这些并且您无法修改应用程序,那么您就会陷入困境。
【讨论】: