Amazon-Web-Services

如何在 Elastic Beanstalk 環境的 Application Load Balancer 上設置條件重定向?

  • December 13, 2021

我有兩個基於 Docker 的單實例 Elastic Beanstalk 環境(一個用於暫存,一個用於生產)。

我想將 (Elastic Beanstalk) 應用程序遷移到負載均衡器後面(主要是為了利用AWS Certificate Manager)。

目前我正在使用.ebextensions自定義 Nginx 配置以滿足我的應用程序的流量路由要求:

  • 對於 path /xyz/,流量應該通過埠 80(即 HTTP)進入應用程序
  • 對於對埠 80 的所有其他請求,應發出對埠 443 (HTTPS) 的 (301) 重定向響應。
  • 埠 443 (HTTPS) 上的所有請求都應通過應用程序。

所以我的問題是:**如何在我的一個 Elastic Beanstalk 環境前使用負載均衡器來滿足這些路由要求?**為了靈活性,我正在考慮每個環境有一個負載均衡器。

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

  1. 使用專用的應用程序負載均衡器設置新的 Elastic Beanstalk 環境,然後通過 EC2 控制台服務修改負載均衡器的偵聽器和規則(類似於Elastic Beanstalk 文件條目似乎建議的內容,在“將 HTTP 流量重定向到 HTTPS > 配置”下負載均衡器”)。
  2. 通過 EC2 控制台服務設置一個新的 Application Load Balancer,創建一個連接到新 Application Load Balancer 作為共享 Application Load Balancer的新 Elastic Beanstalk 環境,然後按照這些指南(thisthis)來(希望?)確保負載均衡器和 Elastic Beanstalk 環境是同步的(在實例管理和流量路由方面)。
  3. 使用專用 Application Load Balancer 設置新的 Elastic Beanstalk 環境,然後修改應用程序,使其偵聽三個埠(一個用於/xyz/流量,一個用於 HTTP -> HTTPS 重定向,一個用於 HTTPS 流量),文件這裡似乎在告訴我這樣做(但沒有提及如何在單個應用程序上實現多個監聽埠)。

選項一和二涉及在 Elastic Beanstalk 的“後面”修改底層資源(我很猶豫),而第三個選項將要求我修改我的應用程序(我想盡量避免)。

是否建議使用這些選項?有更好的選擇嗎?

在聯繫 AWS 技術支持後,我可以確認:

  • 支持第二個選項,我提到的指南不是必需的。即,只要您選擇應用程序負載均衡器(從 EC2 創建)作為共享負載均衡器(在您的 Elastic Beanstalk 環境中),它們就會同步(就適當地將流量路由到環境中的實例而言)。
  • 另一種可能性是採用第一個選項,但不是在 EC2 中修改負載均衡器(我猜不推薦),您可以使用“.ebextensions”來修改負載均衡器。因此,一般來說,只要 AWS 控制台不提供 GUI 來滿足您的 Elastic Beanstalk 要求,“.ebextensions”可用於解決缺少的 Elastic Beanstalk 控制台 GUI。

引用自:https://serverfault.com/questions/1068329