如何在Tomcat 7中代理不同的WAR?

6
我正在开发一个Web应用程序,它由两个独立的部分组成 - 身份验证真实应用部分。这两个部分都是WAR文件,目前都部署在一个Tomcat 7实例中。
因此,我在我的webapps文件夹中有以下两个WAR文件:
webapps
|
+- BloggofantAuthentication
|
+- Bloggofant

到目前为止,它们可以在 http://127.0.0.1:8080/BloggofanAuthenticationhttp://127.0.0.1:8080/Bloggofant 找到。是否可能直接在 Tomcat 上代理这些WAR文件(以便我不必使用Apache httpd及其mod_proxy模块)?最终,在服务器上的WAR可通过以下方式访问:
  • http://127.0.0.1:8080/BloggofantAuthentication --> http://127.0.0.1/bloggo/
  • http://127.0.0.1:8080/Bloggofant --> http://127.0.0.1/bloggo/fant/
对此主题的任何建议都将不胜感激 ;)

编辑

以下是两个解压后的Web应用程序WAR文件夹的context.xml文件:

webapps/BloggofantAuthentication/META-INF/context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context path="">
    <!-- Comment this to enable session persistence across Tomcat restarts -->
    <Manager pathname=""/>
</Context>

webapps/Bloggofant/META-INF/context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/bloggofant">
    <!-- Comment this to enable session persistence across Tomcat restarts -->
    <Manager pathname=""/>
</Context>

如果我现在想通过 http://127.0.0.1:8080 或者 http://127.0.0.1:8080/bloggofant 访问我的应用程序,我会收到 404 - 页面未找到 的错误信息...

2
为什么认证不是Web应用程序本身的一部分?为什么不使用包含管理的身份验证? - Michael-O
@Michael-O,认证部分应该放在一个独立的Tomcat实例上,并为其后面的一堆应用程序提供服务——可以将其视为一个类似于“代理”的东西。我没有使用包含管理的身份验证,因为我必须使用后端API来实现此目的,而且在这个问题上没有灵活性... - herom
1
好的,你的认证有什么特别之处? - Michael-O
@Michael-O,尽管我很想讨论关于我的身份验证的需求和特殊要求,但我想先了解如何首先“代理”这两个WAR档案 - 所以请不要感到冒犯,但我不会再进一步讨论这个问题,因为我想继续这个话题 :) - herom
1个回答

3
您可以使用context.xml文件配置Tomcat提供Web应用程序的路径。您可以将其放在WAR的META-INF目录中,内容如下:
<Context path="/bloggo/fant" />

它将在那里提供服务,而不是默认的/Bloggofant路径。

请注意文档中关于自动部署的警告

当主机执行autoDeploy或deployOnStartup操作时,Web应用程序的名称和上下文路径来自定义Web应用程序的文件名。因此,上下文路径可能未在嵌入应用程序的META-INF/context.xml中定义。

在其他地方,文档告诉我们这两个都默认为true。因此,您需要将它们设置为false,以便尊重这些设置。


非常感谢您的回答!我已经在 webapps/BloggofantAuthentication/META-INFcontext.xml 文件中添加了 <Context path="/bloggo"/> 行,以及在 webapps/Bloggofant/META-INFcontext.xml 文件中添加了 <Context path="/bloggo/fant"/> 行,并重新启动了 Tomcat 7。如果我现在想访问这些页面,我只能看到一个空白页面(没有错误信息)... - herom
你有任何进一步的提示或建议吗?请还注意我在第一个帖子上编辑的内容,其中包括两个context.xml文件的内容... - herom
嗯。你还需要禁用自动部署 - 请看我的编辑。 - Tom Anderson
啊,我明白了 - 非常感谢,我完全忽略了这一点。现在它可以工作了!谢谢你! - herom
不要担心,我也错过了! - Tom Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接