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

时间:2014-06-03 20:30:20

标签: java tomcat amazon-web-services amazon-ec2 elastic-beanstalk

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

在我们自己的系统上,我们将Web应用程序作为路径访问(例如,如果我们部署my-app.war,则为http://server-name/my-app),但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>

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

最后,我们还尝试将此<Context /> - 定义放在<Host />的{​​{1}}部分下,但无济于事。有什么建议吗?

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

my-app

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我知道已经晚了两年。但似乎禁用deployOnStartup将完成工作。

<Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="false" deployOnStartup="false">