Amazon-Web-Services
如何在 Elastic Beanstalk 環境的 Application Load Balancer 上設置條件重定向?
我有兩個基於 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 的“後面”修改底層資源(我很猶豫),而第三個選項將要求我修改我的應用程序(我想盡量避免)。
是否建議使用這些選項?有更好的選擇嗎?
在聯繫 AWS 技術支持後,我可以確認:
- 支持第二個選項,我提到的指南不是必需的。即,只要您選擇應用程序負載均衡器(從 EC2 創建)作為共享負載均衡器(在您的 Elastic Beanstalk 環境中),它們就會同步(就適當地將流量路由到環境中的實例而言)。
- 另一種可能性是採用第一個選項,但不是在 EC2 中修改負載均衡器(我猜不推薦),您可以使用“.ebextensions”來修改負載均衡器。因此,一般來說,只要 AWS 控制台不提供 GUI 來滿足您的 Elastic Beanstalk 要求,“.ebextensions”可用於解決缺少的 Elastic Beanstalk 控制台 GUI。