我有两个基于 Docker 的单实例 Elastic Beanstalk 环境(一个用于暂存,一个用于生产)。
我想将(Elastic Beanstalk)应用程序迁移到负载均衡器后面(主要是为了利用AWS Certificate Manager)。
目前我正在使用.ebextensions自定义 Nginx 配置以满足我的应用程序的流量路由要求:
- 对于 path
/xyz/
,流量应该通过端口 80(即 HTTP)进入应用程序 - 对于对端口 80 的所有其他请求,应发出对端口 443 (HTTPS) 的 (301) 重定向响应。
- 端口 443 (HTTPS) 上的所有请求都应通过应用程序。
所以我的问题是:如何在我的一个 Elastic Beanstalk 环境前使用负载均衡器来满足这些路由要求?为了灵活性,我正在考虑每个环境有一个负载均衡器。
我遇到了以下可能的解决方案(似乎都不理想):
- 使用专用的应用程序负载均衡器设置新的 Elastic Beanstalk 环境,然后通过 EC2 控制台服务修改负载均衡器的侦听器和规则(类似于此Elastic Beanstalk 文档条目似乎建议的内容,在“将 HTTP 流量重定向到 HTTPS > 配置”下负载均衡器”)。
- 通过 EC2 控制台服务设置一个新的 Application Load Balancer,创建一个连接到新 Application Load Balancer 作为共享 Application Load Balancer的新 Elastic Beanstalk 环境,然后按照这些指南(this和this)来(希望?)确保负载均衡器和 Elastic Beanstalk 环境是同步的(在实例管理和流量路由方面)。
- 使用专用 Application Load Balancer 设置新的 Elastic Beanstalk 环境,然后修改应用程序,使其侦听三个端口(一个用于
/xyz/
流量,一个用于 HTTP -> HTTPS 重定向,一个用于 HTTPS 流量),文档这里似乎在告诉我这样做(但没有提及如何在单个应用程序上实现多个监听端口)。
选项一和二涉及在 Elastic Beanstalk 的“后面”修改底层资源(我很犹豫),而第三个选项将要求我修改我的应用程序(我想尽量避免)。
是否建议使用这些选项?有更好的选择吗?