本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Application Load Balancer
負載平衡器做為用戶端的單一聯絡點。用戶端會將請求傳送至負載平衡器,而負載平衡器會將請求傳送至目標,例如 EC2 執行個體。若要設定您的負載平衡器,您需要建立目標群組,然後使用您的目標群組來登錄目標。您也可以建立接聽程式,以檢查來自用戶端的連線請求,並建立接聽程式規則,將來自用戶端的請求路由到一或多個目標群組中的目標。
如需詳細資訊,請參閱 Elastic Load Balancing 使用者指南中的 Elastic Load Balancing的運作方式 。
目錄
負載平衡器的子網路
建立 Application Load Balancer 時,必須啟用內含目標的區域。若要啟用區域,請在該區域中指定子網路。Elastic Load Balancing 會在您指定的每個區域建立負載平衡器節點。
考量事項
-
每個已啟用的區域擁有至少一個已註冊的目標時,負載平衡器的效率最高。
-
如果您在某個區域內註冊目標但未啟用該區域,這些已註冊的目標便不會接收來自負載平衡器的流量。
-
如果您為負載平衡器啟用多個區域,這些區域必須是相同類型。例如,您無法同時啟用可用區域和 Local Zone。
-
您可以指定與您共用的子網路。
Application Load Balancers 支援以下子網路類型。
可用區域子網路
您必須選取至少兩個可用區域子網路。將適用以下限制:
-
每個子網路都必須來自不同的可用區域。
-
為了確保負載平衡器可以正確擴展,請確認負載平衡器的每個可用區域子網路都有一個CIDR區塊,每個子網路至少具有一個
/27
位元遮罩 (例如10.0.0.0/27
) 和至少八個可用的 IP 地址。需要有八個可用 IP 地址,才能讓負載平衡器視需要橫向擴展。負載平衡器會使用這些 IP 地址與目標建立連線。如果沒有這些地址,Application Load Balancer 可能會在嘗試取代節點時遇到困難,而導致其變成失敗狀態。注意:如果嘗試擴展時,Application Load Balancer 子網路用完可用的 IP 地址,Application Load Balancer 將在容量不足的情況下執行。在此期間,舊節點將繼續為流量提供服務,但是在嘗試建立連線時,延遲的擴展嘗試可能會導致 5xx 錯誤或逾時。
Local Zone 子網路
您可以指定一個或多個 Local Zone 子網路。將適用以下限制:
-
您無法 AWS WAF 搭配負載平衡器使用 。
-
您無法將 Lambda 函數做為目標使用。
-
您不能使用黏性工作階段或應用程式黏性。
Outpost 子網路
您可以指定單一的 Outpost 子網路。將適用以下限制:
-
內部部署資料中心必須已安裝和設定 Outpost。Outpost 與其 AWS 區域之間必須有可靠的網路連線。如需詳細資訊,請參閱《AWS Outposts 使用者指南》https://docs.aws.amazon.com/outposts/latest/userguide/。
-
負載平衡器在負載平衡器節點的 Outpost 上需要兩個
large
執行個體。下表所示是支援的執行個體類型。負載平衡器會視需要擴展,一次調整一個節點的大小 (從large
到xlarge
,然後從xlarge
到2xlarge
,接著從2xlarge
到4xlarge
)。將節點擴展至最大的執行個體大小之後,如果您需要額外的容量,負載平衡器會將4xlarge
執行個體新增為負載平衡器節點。如果您沒有足夠的執行個體容量或可用的 IP 地址來擴展負載平衡器,負載平衡器會向 AWS Health Dashboard報告事件,且負載平衡器狀態會變為 active_impaired
。 -
您可以依執行個體 ID 或 IP 地址來註冊目標。如果您在 Outpost 的 AWS 區域中註冊目標,則不會使用這些目標。
-
無法使用以下功能:作為目標的 Lambda 函數、 AWS WAF 整合、粘性會話、身分驗證支援以及與 AWS Global Accelerator整合。
Application Load Balancer 可以部署在 Outpost 上的 c5/c5d, m5/m5d, or r5/r5d 執行個體上。下表顯示負載平衡器可在 Outpost 上使用的每個執行個體類型的大小和 EBS 磁碟區:
執行個體類型和大小 | EBS磁碟區 (GB) |
---|---|
c5/c5d | |
大型 | 50 |
xlarge | 50 |
2xlarge | 50 |
4xlarge | 100 |
m5/m5d | |
大型 | 50 |
xlarge | 50 |
2xlarge | 100 |
4xlarge | 100 |
r5/r5d | |
大型 | 50 |
xlarge | 100 |
2xlarge | 100 |
4xlarge | 100 |
負載平衡器安全群組
安全群組扮演防火牆的角色,可控制允許進出負載平衡器的流量。您可以選擇連接埠和通訊協定,以同時允許傳入和傳出流量。
與負載平衡器相關聯之安全群組的規則,在接聽程式連接埠和運作狀態檢查連接埠上都必須允許這兩個方向的流量。當您將接聽程式新增至負載平衡器,或更新目標群組的運作狀態檢查連接埠時,您必須檢閱安全群組規則,以確保它們在新的連接埠上同時允許這兩個方向的流量。如需詳細資訊,請參閱建議的規則。
負載平衡器狀態
負載平衡器可以是以下其中一個狀態:
provisioning
-
正在設定負載平衡器。
active
-
負載平衡器已設定完成並準備好路由流量。
active_impaired
-
負載平衡器正在路由流量,但不具備擴展所需的資源。
failed
-
無法設定的負載平衡器。
負載平衡器屬性
您可以編輯 Application Load Balancer 的屬性來設定 Application Load Balancer。如需詳細資訊,請參閱編輯負載平衡器屬性。
以下是負載平衡器屬性:
access_logs.s3.enabled
-
指出在 Amazon S3 中存放的存取日誌是否啟用。預設值為
false
。 access_logs.s3.bucket
-
存取日誌的 Amazon S3 儲存貯體名稱。如果啟用存取日誌,則此為必要屬性。如需詳細資訊,請參閱啟用存取日誌。
access_logs.s3.prefix
-
Amazon S3 儲存貯體中的位置字首。
client_keep_alive.seconds
-
用戶端保持連線值,以秒為單位。預設值為 3600 秒。
deletion_protection.enabled
-
表示是否已啟用刪除保護。預設值為
false
。 idle_timeout.timeout_seconds
-
閒置逾時值 (以秒為單位)。預設值為 60 秒。
ipv6.deny_all_igw_traffic
-
封鎖對負載平衡器的網際網路閘道 (IGW) 存取,防止透過網際網路閘道意外存取您的內部負載平衡器。如果是面向網際網路的負載平衡器,設為
false
,如果是內部負載平衡器,則設為true
。此屬性不會阻止非 IGW 網際網路存取 (例如透過對等互連、Transit Gateway AWS Direct Connect、 或 AWS VPN)。 routing.http.desync_mitigation_mode
-
決定負載平衡器如何處理可能對應用程式造成安全風險的請求。可能的值為
monitor
、defensive
和strictest
。預設值為defensive
。 routing.http.drop_invalid_header_fields.enabled
-
指示負載平衡器 (
true
) 是否移除具有無效標頭欄位的 HTTP 標頭,或路由至目標 ()false
。預設值為false
。Elastic Load Balancing 要求有效的 HTTP 標頭名稱符合規則表達式[-A-Za-z0-9]+
,如 HTTP 欄位名稱登錄檔中所述。每個名稱由英數字元或連字號組成。true
如果您希望從請求中移除不符合此模式的 HTTP 標頭,請選取 。 routing.http.preserve_host_header.enabled
-
指示 Application Load Balancer 是否應該保留 HTTP 請求中的
Host
標頭,並將其傳送至目標,而不會進行任何變更。可能的值為true
和false
。預設值為false
。 routing.http.x_amzn_tls_version_and_cipher_suite.enabled
-
指示包含交涉 TLS 版本和密碼套件相關資訊的兩個標頭 (
x-amzn-tls-version
和x-amzn-tls-cipher-suite
) 是否在傳送至目標之前新增至用戶端請求。x-amzn-tls-version
標頭具有與用戶端交涉的 TLS 通訊協定版本相關資訊,而x-amzn-tls-cipher-suite
標頭具有與用戶端交涉的加密套件相關資訊。兩個標頭都是 OpenSSL 格式。此屬性的可能值為true
和false
。預設值為false
。 routing.http.xff_client_port.enabled
-
指示
X-Forwarded-For
標頭是否應該保留用戶端用來連線到負載平衡器的來源連接埠。可能的值為true
和false
。預設值為false
。 routing.http.xff_header_processing.mode
-
可讓您在 Application Load Balancer 將請求傳送至目標之前,修改、保留或移除 HTTP 請求中的
X-Forward-For
標頭。可能的值為append
、preserve
和remove
。預設值為append
。-
如果值為
append
,Application Load Balancer 會在將用戶端 IP 地址 (最後一個躍點的) 傳送至目標之前,先將其新增至 HTTP 請求中的X-Forward-For
標頭。 -
如果值為
preserve
,Application Load Balancer 會保留 HTTP 請求中的X-Forward-For
標頭,並將其傳送至目標,而不會進行任何變更。 -
如果值為
remove
,Application Load Balancer 會先移除 HTTP 請求中的X-Forward-For
標頭,再將其傳送至目標。
-
routing.http2.enabled
-
指示是否啟用 HTTP/2。預設值為
true
。 waf.fail_open.enabled
-
指示是否允許 AWS WAF已啟用負載平衡器在無法將請求轉送至目標時,將請求路由至目標 AWS WAF。可能的值為
true
和false
。預設值為false
。
注意
已引進 routing.http.drop_invalid_header_fields.enabled
屬性以提供 HTTP 非同步保護。已新增 routing.http.desync_mitigation_mode
屬性,以為您的應用程式提供更全面的 HTTP 非同步保護。您不需要同時使用這兩個屬性,可選擇其中一個屬性,具體取決於您的應用程式需求。
IP 地址類型
您可以設定 IP 地址類型,用戶端可以使用此類型的 IP 地址存取面向網際網路的負載平衡器和內部負載平衡器。
Application Load Balancer 支援下列 IP 地址類型:
ipv4
-
用戶端必須使用 IPv4 地址連線到負載平衡器 (例如 192.0.2.1)
dualstack
-
用戶端可以使用 IPv4 地址 (例如 192.0.2.1) 和 IPv6 地址 (例如 2001:0db8:85a3:0:0:8a2e:0370:7334) 連線到負載平衡器。
考量事項
-
負載平衡器會根據目標群組的 IP 地址類型與目標進行通訊。
-
當您為負載平衡器啟用雙堆疊模式時,Elastic Load Balancing 會提供負載平衡器的 AAAA DNS記錄。使用 IPv4 地址與負載平衡器通訊的用戶端會解析 A DNS 記錄。使用 IPv6 地址與負載平衡器通訊的用戶端會解析 AAAA DNS 記錄。
-
透過網際網路閘道存取內部雙堆疊負載平衡器會遭到封鎖,以防止來自網際網路的非預期存取。不過,這不會阻止非 IGW 網際網路存取 (例如透過對等互連 AWS Direct Connect、Transit Gateway 或 AWS VPN)。
-
dualstack-without-public-ipv4
-
用戶端必須使用 IPv6 地址 (例如 2001:0db8:85a3:0:0:8a2e:0370:7334) 連線到負載平衡器。
考量事項
-
Application Load Balancer 身分驗證僅在連線至 Identity Provider (IdP) 或 Amazon Cognito 端點時支援 IPv4。如果沒有公有 IPv4 地址,負載平衡器就無法完成身分驗證程序,導致 HTTP 500 錯誤。
-
如需 IP 地址類型的詳細資訊,請參閱 更新 Application Load Balancer 的 IP 地址類型。
負載平衡器連線
處理請求時,負載平衡器會維護兩個連線:一個與用戶端的連線,另一個與目標的連線。負載平衡器與用戶端之間的連線也稱為前端連線。負載平衡器與目標之間的連線也稱為後端連線。
跨區域負載平衡
使用 Application Load Balancer 時,跨區域負載平衡依預設會開啟,而且無法在負載平衡器層級進行變更。如需詳細資訊,請參閱 Elastic Load Balancing User Guide 中的 Cross-zone load balancing 章節。
可以在目標群組層級關閉跨區域負載平衡。如需詳細資訊,請參閱關閉跨區域負載平衡。
DNS名稱
每個 Application Load Balancer 都會收到具有下列語法的預設網域名稱系統 (DNS) 名稱:name
-id
.elb。region
.amazonaws.com。例如, my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com。
如果您想要使用更易於記住的 DNS 名稱,您可以建立自訂網域名稱,並將其與 Application Load Balancer 的 DNS 名稱建立關聯。當用戶端使用此自訂網域名稱提出請求時,DNS 伺服器會將其解析為 Application Load Balancer 的 DNS 名稱。
首先,向取得認證的網域名稱註冊商註冊網域名稱。接下來,使用您的 DNS 服務,例如網域註冊商,建立 DNS 記錄,將請求路由至 Application Load Balancer。如需詳細資訊,請參閱 DNS 服務的文件。例如,如果您使用 Amazon Route 53 作為 DNS 服務,您可以建立指向 Application Load Balancer 的別名記錄。如需詳細資訊,請參閱 Amazon Route 53 開發人員指南中的將流量路由至 ELB 負載平衡器。
Application Load Balancer 每個啟用的可用區域有一個 IP 地址。這些是 Application Load Balancer 節點的 IP 地址。Application Load Balancer 的 DNS 名稱會解析為這些地址。例如,假設 Application Load Balancer 的自訂網域名稱為 example.applicationloadbalancer.com
。使用下列 dig或 nslookup命令來判斷 Application Load Balancer 節點的 IP 地址。
Linux 或 Mac
$
dig +short
example.applicationloadbalancer.com
Windows
C:\>
nslookup
example.applicationloadbalancer.com
Application Load Balancer 的節點具有 DNS 記錄。您可以使用 DNS 名稱搭配下列語法來判斷 Application Load Balancer 節點的 IP 地址:az
.name
-id
.elb。region
.amazonaws.com。
Linux 或 Mac
$
dig +short
us-east-2b.my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com
Windows
C:\>
nslookup
us-east-2b.my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com