目標是在簡單堆棧中包含HTTP/2支持:部署在多個EC2實例中的web應用+啓用PROXY協議策略的傳輸級CLB(SSL :443➝TCP:80),以卸載SSL/TLS並平衡傳入的HTTPS流量。 (1)地理定位邏輯的執行;(2)地理定位邏輯的執行;(2) (2)執行簡單的訪問控制規則;和(3)記錄。所有這些功能都需要訪問可靠的(即不可微不足道的)客戶端IP地址。 AWS中PROXY協議的唯一替代方案是切換到應用程序級平衡並使用XFF標頭提取客戶端的遠程IP地址。然而,這是不可接受的:任何人都可以簡單地改變其IP地址,只需在傳入的HTTPS請求中注入假XFF頭。 AFAIK,AWS CLBs/ELBs不會注入包含客戶端遠程IP的標頭(例如類似the True-Client-IP header in Akamai的東西)。AWS CLB/ELB + HTTP/2支持
因此,如何將H2支持添加到堆棧?經過一番研究所有可能的選項看起來不能令人滿意:因爲SSL/TLS在CLB終止
目前的架構是無效的,但CLB不提供任何選項announce H2 support through ALPN。
使用CLB的替代方法是停止使用SSL/TLS卸載功能並將其移至EC2實例(即TCP:443➝TCP:443)。這種方式可以在SSL/TLS握手期間宣佈H2支持,但該選項需要升級EC2實例以支持額外的SSL/TSL工作負載。類似的替代品:
- TCP:443➝SSL:443:類似於TCP:443➝TCP:443,但允許使用值得信賴的公鑰證書的列表,後臺認證。
- SSL:443➝SSL:443:類似於TCP的端到端加密:443➝SSL:443。不是一個真正的選擇:(1)PROXY協議是not supported for this combination(並且使用XFF也不是一個選項,因爲這是傳輸級別平衡);和(2)客戶端SSL/TLS握手在CLB中執行,所以H2不會被公佈。
其他選項將由一個ELB(HTTPS➝HTTP)被替換CLB。 ELB支持H2。但是(1)我們需要依靠XFF來提取客戶端IP地址(已經解釋了爲什麼這是一個問題); (2)ELB和EC2實例之間的流量爲H1(我們希望未加密的H2流量到達EC2實例)。換句話說,這不是一個選項。
總之,所有選項都有問題。恕我直言,理想的解決方案是保持原始CLB(SSL:443➝TCP:80;平衡+ SSL/TLS卸載+ PROXY協議),並允許CLB中的策略通過ALPN宣佈H2支持。但是,我擔心這在AWS中是不可能的。 CLB TCP的任何替代方案:443➝TCP:443方法?
關於XFF欺騙部分:您對此絕對正確,您的解釋對於應用程序級CLB也是如此。這意味着我的問題中的PROXY協議要求並不重要(儘管我仍然喜歡傳輸級負載平衡的想法)。 –
關於H2部分:我知道ELB在使用H2時的好處和 - 現在我知道XFF不能被欺騙 - 我同意ELBs是爲了添加H2支持而保持SSL/TLS在LB中卸載的方式。就個人而言,我寧願在傳輸級別的LB中進行SSL/TLS卸載,讓未加密的H2到達EC2實例,但恐怕這個選項根本不存在。 –