將臨時埠重定向到 80
我一般從 AWS 和伺服器管理開始,只是用 ECS 和一些容器建立了一個部署管道。
我的容器:
- 我的主機埠為 0 並重定向到容器埠 4200(Angular 預設埠)
- 位於應用程序負載均衡器後面
- 分配了一個動態埠
當我閱讀埠映射和負載平衡文件時,我無法理解如何自動檢索該埠並將其路由到埠 80。我想要的基本上是在 URL 中沒有埠規範的情況下訪問我的網站。
我知道我可以在其中找到預設埠範圍: /proc/sys/net/ipv4/ip_local_port_range
我目前被困的地方是:
1 - 選擇的臨時埠如何映射到預設的 http 流量埠 (80)
2 - 我如何確保如果埠已經在使用,我仍然在臨時埠範圍內獲取正確的埠,以便可以將這個埠映射到 80。
難以理解的是,這裡實際上需要考慮三個埠:
- Application Load Balancer (ALB) 的外部埠 - 偵聽器
- 在您的 ECS 集群上執行的 EC2 實例的“主機埠”
- 在容器內執行的應用程序的“容器埠”
當您將“主機埠”指定為 0 時,奇蹟就會發生,這是對 ECS 的指令,以使用 EC2 ECS 主機實例上公開的隨機臨時埠啟動容器。允許(例如)您在同一個 EC2 實例上執行同一個容器的兩個實例。由於 ECS/ALB 負責動態映射它,您實際上不需要了解正在使用哪個埠(可能診斷除外) - 除非您確實需要確保您的 ECS 實例的安全組允許所有臨時埠範圍從ALB - 否則流量不會從 ALB 傳遞到應用程序。
每個容器實例的內部容器埠 4200 可以相同,因為它僅在容器本身內部可見。
然後,為了讓您的應用程序使用埠 80 - 因此它對您的使用者來說是一種無縫體驗 - ALB 偵聽器埠應該是埠 80,因為它是您的使用者將連接到的 ALB - 即http:// yourapplication.com/是 ALB DNS 名稱的 CNAME。
可以在此處找到有關設置的更多詳細資訊:
和這裡:
使用 Application Load Balancer 在 ECS 中進行動態埠映射
最後,雖然您的目標是導出埠 80,但我強烈建議在負載均衡器上的 443 上使用 HTTPS,因為您可以從 AWS 免費獲得 ALB 證書。今天公開的任何服務都應該盡可能地使用 TLS (SSL)。
當然,如果您確實希望您的使用者仍然通過 HTTP 訪問並重定向他們 - 幸運的是,從上個月開始,您現在可以使用 ALB 上的重定向操作在 ALB 中通過將重定向規則附加到埠 80 偵聽器來本地執行此操作。更多細節在這裡: