我可以在单个 EC2 实例上运行多个 Web 应用程序吗

我可以在单个 EC2 实例上运行多个 Web 应用程序吗

我需要降低 AWS 成本并寻找减少 AWS 使用量的方法。我目前有一个 java/tomcat webapp,我使用不同的配置运行多个 EC2 实例。我有 siteone.com 和 sitetwo.com,它们在同一个 ElasticBeanstalk 环境中都有自己的 EC2 实例。这些实例是负载平衡的(我正在考虑删除负载平衡以降低成本),它们都需要 SSL 和与 RDS 实例的连接。它们目前都在同一个 VPC 中。为了降低成本,我需要减少实例。我该如何在单个 EC2 实例上运行多个 tomcat web 应用程序。我是这方面的唯一开发人员,需要一些指导。谢谢!

答案1

您可以在同一台机器上运行两个实例。并使用 Apache 的 mod_proxy 在内部将您的流量重定向到正确的 Web 应用程序(对用户透明)。

因此,您需要设置一个应用程序监听 ,localhost:1337另一个监听localhost:1338。您还必须更改 DNS 设置,以便您的 Web 应用程序的两个 URL 都指向该单台机器的 IP 地址。然后,Apache 将能够通过查看用户提供的 URL(webapp1.comwebapp2.com)将流量发送到正确的 Web 应用程序。如果是,webapp1.com它会将流量内部转发到localhost:1337,否则,它会将流量发送到localhost:1338

我使用 Google 搜索“EC2 mod_proxy”找到了这个: http://flurdy.com/docs/ec2/apache_tomcat/#twoServers

并且(无耻的自我推销):http://blog.beardhatcode.be/2015/10/httpd-proxy.html

答案2

beardhatcode 所说的(尽管我更喜欢 Nginx 甚至 HAproxy),当然,您可以考虑通过将数据库放在同一个主实例上来删除 RDS 实例。这是否是一个好主意取决于数据库的规格,但它仍然是一个选择。

答案3

从 Elastic Beanstalk 切换到 OpsWorks 可能是最简单的解决方案。OpsWorks 支持每个“堆栈”(可能只有一个实例)有多个应用程序。

相关内容