【问题标题】:Access Tomcat root application under different path (on AWS/Elastic Beanstalk)在不同路径下访问 Tomcat 根应用程序(在 AWS/Elastic Beanstalk 上)
【发布时间】:2014-07-24 07:59:31
【问题描述】:

我们正在将 web 应用程序(.war 文件)从我们可以完全控制 Tomcat 实例的旧系统部署到 Amazon 的 Elastic Beanstalk 实例。

在我们自己的系统上,我们以路径的形式访问 Web 应用程序(例如,如果我们部署 my-app.war,则为 http://server-name/my-app),但 Elastic Beanstalk 将我们的 war-file 重命名为 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 路径下访问。

最后,我们还尝试将这个&lt;Context /&gt;-definition 放在server.xml&lt;Host /&gt; 部分下,但无济于事。有什么建议吗?

更新:将以下内容添加到&lt;Host/&gt;-定义下的server.xml 时,我可以在正确的路径下访问my-app,但似乎EB 上的Tomcat 是现在部署我的应用程序两次:

<Context path="/my-app" docBase="ROOT/"></Context>

【问题讨论】:

  • 我已经被这个问题困扰了 3 天了。我不知道该怎么办。在本地,我可以使用上下文根访问我的应用程序和 REST 服务,但是当部署在 aws 实例上时,它不可用。我在哪里可以找到 server.xml?指向任何文档的指针都会有所帮助。我也可以使用 putty 连接到我的实例,但我找不到路径 /etc/tomcat7/Catalina/localhost/ROOT.xml
  • @breght 那么,结果如何?我面临着完全相同的问题,如果我必须创建context.xmlserver.xml,我不知道它必须有什么内容:·) 提前致谢!

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我知道已经晚了两年。但似乎禁用 deployOnStartup 就可以了。

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

    【讨论】:

      猜你喜欢
      • 2013-04-21
      • 2016-04-02
      • 2019-04-20
      • 2014-04-24
      • 2017-11-26
      • 2015-03-29
      • 2018-11-09
      • 2018-09-13
      • 2017-08-01
      相关资源
      最近更新 更多