在不同路径下访问Tomcat根应用程序(在AWS/Elastic Beanstalk上)

bre*_*ght 5 java tomcat amazon-ec2 amazon-web-services amazon-elastic-beanstalk

我们正在从遗留系统部署webapp(.war文件),我们可以完全控制我们的Tomcat实例到Amazon的Elastic Beanstalk实例.

在我们自己的系统上,我们访问Web应用程序作为路径(例如,http://server-name/my-app如果我们部署my-app.war),但Elastic Beanstalk将我们的war文件重命名为ROOT.war,从而使Web应用程序可用http://server-name,这打破了我们现有的应用.

根据AWS文档,我们在其下添加了一个配置文件WEB-INF/.ebextensions,将以下自定义context.xml文件复制到/etc/tomcat7/Catalina/localhost/ROOT.xml:

<?xml version='1.0' encoding='utf-8'?>
<Context displayName="localhost" docBase="" path="/my-app">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
Run Code Online (Sandbox Code Playgroud)

我们尝试过这个文件的不同版本,例如省略docBase,指定docBase="ROOT",使用aliases参数等,提供ROOT目录等的完整路径,但没有一个使我们的WAR文件可以在/my-app路径下访问.

最后,我们还尝试将此<Context />-definition置于该<Host />部分下server.xml,但无济于事.有什么建议?

更新:在-definition server.xml下添加以下内容时<Host/>,我可以my-app在正确的路径下访问,但似乎EB上的Tomcat现在正在部署我的应用程序两次:

<Context path="/my-app" docBase="ROOT/"></Context>
Run Code Online (Sandbox Code Playgroud)

bre*_*ght 0

虽然我们现在可以在所需的路径下访问我们的应用程序,但该应用程序仍然被 Tomcat 部署了两次。虽然这对我们来说是一个小麻烦,但我可以想象这在资源紧张的机器上是一个问题。从好的方面来说,我们现在可以开始迁移我们的应用程序,在访问 API 时不再使用资源路径,这会导致 API URL 更干净、更短。