如何在应用程序负载均衡器上为 Elastic Beanstalk 环境设置条件重定向?

如何在应用程序负载均衡器上为 Elastic Beanstalk 环境设置条件重定向?

我有两个基于 Docker 的单实例 Elastic Beanstalk 环境(一个用于暂存,一个用于生产)。

我想将 (Elastic Beanstalk) 应用程序迁移到负载均衡器后面(主要是为了利用AWS 证书管理器)。

目前我正在使用.ebextensions定制 Nginx 配置以满足我的应用程序的流量路由要求:

  • 对于路径/xyz/,流量应通过端口 80(即 HTTP)进入应用程序
  • 对于所有其他对端口 80 的请求,应发出对端口 443 (HTTPS) 的 (301) 重定向响应。
  • 端口 443(HTTPS)上的所有请求都应传递到应用程序。

我的问题是:如何使用我的一个 Elastic Beanstalk 环境前面的负载均衡器来实现这些路由要求?为了灵活性,我正在考虑每个环境配备一个负载均衡器。

我遇到了以下可能的解决方案(但似乎都不理想):

  1. 设置具有专用的 Elastic Beanstalk 环境应用程序负载均衡器然后通过 EC2 控制台服务修改负载均衡器的侦听器和规则(类似于Elastic Beanstalk 文档条目似乎建议在“将 HTTP 流量重定向到 HTTPS > 配置负载均衡器”下。
  2. 通过 EC2 控制台服务设置新的应用程序负载均衡器,创建一个连接到新应用程序负载均衡器的新 Elastic Beanstalk 环境作为共享应用程序负载均衡器然后按照以下指南操作() 以(希望?)确保负载均衡器和 Elastic Beanstalk 环境同步(在实例管理和流量路由方面)。
  3. 使用专用的应用程序负载均衡器设置一个新的 Elastic Beanstalk 环境,然后修改应用程序,使其侦听三个端口(一个用于流量/xyz/,一个用于 HTTP -> HTTPS 重定向,一个用于 HTTPS 流量),文档这里似乎在告诉我做什么(但没有提到如何在单个应用程序上实现多个监听端口)。

选项一和选项二涉及在 Elastic Beanstalk 的“背后”修改底层资源(我对此犹豫不决),而第三个选项则要求我修改我的应用程序(我想尝试避免)。

以上这些选项是否值得推荐?还有更好的选择吗?

答案1

在就此事联系 AWS 技术支持后,我可以确认:

  • 支持第二种选择,我提到的指南不是必需的。即,只要您选择应用程序负载均衡器(从 EC2 创建)作为共享负载均衡器(在您的 Elastic Beanstalk 环境中),它们就会同步(就适当地将流量路由到环境中的实例而言)。
  • 另一种可能性是采用第一个选项,但不是修改 EC2 中的负载均衡器(我猜不建议这样做),而是使用“ .ebextensions”来修改负载均衡器。因此,一般来说,每当 AWS 控制台不提供 GUI 来满足您的 Elastic Beanstalk 要求时,都可以使用“ .ebextensions”来解决缺少的 Elastic Beanstalk 控制台 GUI。

相关内容