我有两个基于 Docker 的单实例 Elastic Beanstalk 环境(一个用于暂存,一个用于生产)。
我想将 (Elastic Beanstalk) 应用程序迁移到负载均衡器后面(主要是为了利用AWS 证书管理器)。
目前我正在使用.ebextensions定制 Nginx 配置以满足我的应用程序的流量路由要求:
- 对于路径
/xyz/
,流量应通过端口 80(即 HTTP)进入应用程序 - 对于所有其他对端口 80 的请求,应发出对端口 443 (HTTPS) 的 (301) 重定向响应。
- 端口 443(HTTPS)上的所有请求都应传递到应用程序。
我的问题是:如何使用我的一个 Elastic Beanstalk 环境前面的负载均衡器来实现这些路由要求?为了灵活性,我正在考虑每个环境配备一个负载均衡器。
我遇到了以下可能的解决方案(但似乎都不理想):
- 设置具有专用的 Elastic Beanstalk 环境应用程序负载均衡器然后通过 EC2 控制台服务修改负载均衡器的侦听器和规则(类似于这Elastic Beanstalk 文档条目似乎建议在“将 HTTP 流量重定向到 HTTPS > 配置负载均衡器”下。
- 通过 EC2 控制台服务设置新的应用程序负载均衡器,创建一个连接到新应用程序负载均衡器的新 Elastic Beanstalk 环境作为共享应用程序负载均衡器然后按照以下指南操作(这和这) 以(希望?)确保负载均衡器和 Elastic Beanstalk 环境同步(在实例管理和流量路由方面)。
- 使用专用的应用程序负载均衡器设置一个新的 Elastic Beanstalk 环境,然后修改应用程序,使其侦听三个端口(一个用于流量
/xyz/
,一个用于 HTTP -> HTTPS 重定向,一个用于 HTTPS 流量),文档这里似乎在告诉我做什么(但没有提到如何在单个应用程序上实现多个监听端口)。
选项一和选项二涉及在 Elastic Beanstalk 的“背后”修改底层资源(我对此犹豫不决),而第三个选项则要求我修改我的应用程序(我想尝试避免)。
以上这些选项是否值得推荐?还有更好的选择吗?
答案1
在就此事联系 AWS 技术支持后,我可以确认:
- 支持第二种选择,我提到的指南不是必需的。即,只要您选择应用程序负载均衡器(从 EC2 创建)作为共享负载均衡器(在您的 Elastic Beanstalk 环境中),它们就会同步(就适当地将流量路由到环境中的实例而言)。
- 另一种可能性是采用第一个选项,但不是修改 EC2 中的负载均衡器(我猜不建议这样做),而是使用“ .ebextensions”来修改负载均衡器。因此,一般来说,每当 AWS 控制台不提供 GUI 来满足您的 Elastic Beanstalk 要求时,都可以使用“ .ebextensions”来解决缺少的 Elastic Beanstalk 控制台 GUI。