編輯 Application Load Balancer 的屬性 - Elastic Load Balancing

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

編輯 Application Load Balancer 的屬性

建立 Application Load Balancer 之後,您可以編輯其屬性。

連線閒置逾時

連線閒置逾時是現有用戶端或目標連線在負載平衡器關閉連線之前,可保持非作用中狀態且未傳送或接收資料的時間。

為了確保檔案上傳等冗長操作有時間完成,請在每個閒置逾時期間經過之前傳送至少 1 位元組的資料,並視需要增加閒置逾時期間的長度。也建議您將應用程式的閒置逾時設定為大於負載平衡器所設定的閒置逾時。否則,如果應用程式以無法修復的方式關閉與負載平衡器的TCP連線,則負載平衡器可能會先將請求傳送至應用程式,再接收到表示連線已關閉的封包。如果發生這種情況,負載平衡器會將 HTTP 502 錯誤閘道錯誤傳送至用戶端。

根據預設,Elastic Load Balancing 會將負載平衡器的閒置逾時值設定為 60 秒或 1 分鐘。使用下列程序來設定不同的閒置逾時值。

使用主控台更新連線閒置逾時值
  1. 在 開啟 Amazon EC2主控台https://console.aws.amazon.com/ec2/

  2. 在導覽窗格上選擇 Load Balancers (負載平衡器)

  3. 選取負載平衡器。

  4. 屬性索引標籤中,選擇編輯

  5. 流量組態下,輸入連線閒置逾時的值。有效範圍為 1 到 4000 秒。

  6. 選擇 Save changes (儲存變更)。

使用 更新閒置逾時值 AWS CLI

使用 modify-load-balancer-attributes命令搭配 idle_timeout.timeout_seconds 屬性。

HTTP 用戶端保持連線持續時間

HTTP 用戶端保持連線持續時間是 Application Load Balancer 持續與用戶端HTTP連線的時間長度上限。在設定的HTTP用戶端持續運作期間過後,Application Load Balancer 會接受另一個請求,然後傳回可正常關閉連線的回應。

負載平衡器傳送的回應類型取決於用戶端連線所使用的HTTP版本。

  • 對於使用 HTTP 1.x 連線的用戶端,負載平衡器會傳送包含 欄位 的HTTP標頭。 Connection: close

  • 對於使用 HTTP/2 連線的用戶端,負載平衡器會傳送GOAWAY影格。

根據預設,Application Load Balancer 會將負載平衡器的HTTP用戶端保持連線持續時間值設定為 3600 秒或 1 小時。HTTP 用戶端保持連線持續時間無法關閉或設定為低於最短 60 秒,但您可以增加HTTP用戶端保持連線持續時間,最長可達 604800 秒,或 7 天。Application Load Balancer 會在初始建立HTTP與用戶端的HTTP連線時,開始用戶端的持續運作期間。當沒有流量時,持續時間會繼續,而且在建立新的連線之前不會重設。

當負載平衡器流量使用區域轉移或區域自動轉移從受損的可用區域轉移時,具有現有開放連線的用戶端可能會繼續對受損位置提出請求,直到用戶端重新連線為止。若要支援更快的復原,請考慮設定較低的保持連線持續時間值,以限制用戶端與負載平衡器保持連線的時間量。如需詳細資訊,請參閱《Amazon Application Recovery Controller (ARC) 開發人員指南》中的限制用戶端持續連線到端點的時間

注意

當負載平衡器將 Application Load Balancer 的 IP 地址類型切換至 時dualstack-without-public-ipv4,負載平衡器會等待所有作用中連線完成。若要減少切換 Application Load Balancer 的 IP 地址類型所需的時間量,請考慮降低HTTP用戶端保持連線持續時間。

Application Load Balancer 會在初始連線期間指派HTTP用戶端保持連線持續時間值。當您更新HTTP用戶端保持連線持續時間時,這可能會導致與不同HTTP用戶端保持連線持續時間值的同步連線。現有連線會保留在初始連線期間套用的HTTP用戶端保持連線持續時間值。新連線會收到更新的HTTP用戶端保持連線持續時間值。

使用 主控台更新用戶端保持連線持續時間值
  1. 在 開啟 Amazon EC2主控台https://console.aws.amazon.com/ec2/

  2. 在導覽窗格上選擇 Load Balancers (負載平衡器)

  3. 選取負載平衡器。

  4. 屬性索引標籤中,選擇編輯

  5. 流量組態下,輸入HTTP用戶端保持連線持續時間的值。有效範圍為 60 到 604800 秒。

  6. 選擇 Save changes (儲存變更)。

使用 更新用戶端保持連線持續時間值 AWS CLI

使用 modify-load-balancer-attributes命令搭配 client_keep_alive.seconds 屬性。

刪除保護

為避免您的負載平衡器上遭意外刪除,您可以啟用刪除保護。您的負載平衡器的刪除保護預設為停用。

如果您為負載平衡器啟用刪除保護,則必須先停用才可刪除負載平衡器。

使用主控台來啟用刪除保護
  1. 在 開啟 Amazon EC2主控台https://console.aws.amazon.com/ec2/

  2. 在導覽窗格上選擇 Load Balancers (負載平衡器)

  3. 選取負載平衡器。

  4. 屬性索引標籤中,選擇編輯

  5. 組態下方,開啟刪除保護

  6. 選擇 Save changes (儲存變更)。

使用主控台來停用刪除保護
  1. 在 開啟 Amazon EC2主控台https://console.aws.amazon.com/ec2/

  2. 在導覽窗格上選擇 Load Balancers (負載平衡器)

  3. 選取負載平衡器。

  4. 屬性索引標籤中,選擇編輯

  5. 組態頁面下方,關閉刪除保護

  6. 選擇 Save changes (儲存變更)。

使用 啟用或停用刪除保護 AWS CLI

使用 modify-load-balancer-attributes命令搭配 deletion_protection.enabled 屬性。

去同步緩解模式

Desync HTTP 緩解模式可保護您的應用程式免於因取消同步造成的問題。負載平衡器會根據其威脅層級對每個要求進行分類,允許安全要求,然後根據您指定的緩和模式來降低風險。非同步緩和模式分為監控、防禦性和最嚴格。預設值是防禦模式,可提供持久的HTTP去同步緩解,同時維持應用程式的可用性。您可以切換到最嚴格的模式,以確保您的應用程式只收到符合 RFC7230 的請求。

http_desync_guardian 程式庫會分析HTTP請求,以防止HTTP非同步攻擊。如需詳細資訊,請參閱 上的 HTTP Desync Guardian GitHub。

分類

分類如下:

  • 合規 — 請求符合 RFC 7230,不會造成已知的安全威脅。

  • 可接受 — 請求不符合 RFC 7230,但不會造成已知的安全威脅。

  • 模棱兩可:請求不符合 RFC 7230,但會帶來風險,因為各種 Web 伺服器和代理處理方式可能不同。

  • 嚴重 — 要求造成高安全性風險。負載平衡器會封鎖要求,傳送提供 400 回應至用戶端,並關閉用戶端連線。

如果請求不符合 RFC 7230,負載平衡器會遞增DesyncMitigationMode_NonCompliant_Request_Count指標。如需詳細資訊,請參閱Application Load Balancer 指標

每個請求的分類都包含在負載平衡器存取日誌中。如果請求不符合規定,存取日誌會包含分類原因代碼。如需詳細資訊,請參閱分類原因

模式

下表說明 Application Load Balancer 如何根據模式和分類處理請求。

分類 監控模式 防禦性模式 最嚴格模式
合規 允許 已允許 允許
可接受 允許 允許 封鎖
不明確 允許 允許¹ 封鎖
嚴重 允許 封鎖 封鎖

¹ 路由傳送要求,但關閉用戶端和目標連接。如果負載平衡器在防禦模式下收到大量「不明確」請求,則可能會產生額外費用。這是因為增加的每秒新連線數有助於每小時使用的Load Balancer容量單位 (LCU)。您可以使用 NewConnectionCount 指標,來比較負載平衡器在監控模式和防禦模式下建立新連線的方式。

使用主控台更新非同步緩和模式
  1. 在 開啟 Amazon EC2主控台https://console.aws.amazon.com/ec2/

  2. 在導覽窗格上選擇 Load Balancers (負載平衡器)

  3. 選取負載平衡器。

  4. 屬性索引標籤中,選擇編輯

  5. 封包處理下,在去同步緩解模式中,選擇防禦最嚴格監控

  6. 選擇 Save changes (儲存變更)。

使用 更新非同步緩解模式 AWS CLI

使用 routing.http.desync_mitigation_mode 屬性設定為 monitordefensive或 的 modify-load-balancer-attributes命令strictest

主機標頭保留

當您啟用保留主機標頭屬性時,Application Load Balancer 會在HTTP請求中保留Host標頭,並將標頭傳送至目標,而不會進行任何修改。如果 Application Load Balancer 收到多個 Host 標頭,則會全部保留。只會將接聽程式規則套用至收到的第一個 Host 標頭。

依預設,如果未啟用保留主機標頭屬性,則 Application Load Balancer 會以下列方式修改 Host 標頭:

未啟用主機標頭保留,且接聽程式連接埠不是預設連接埠時:未使用預設連接埠 (連接埠 80 或 443) 時,如果用戶端尚未附加連接埠號碼,則我們會將該號碼附加至主機標頭。例如,如果接聽程式連接埠是非預設連接埠,例如 Host: www.example.com:8080,則 HTTP請求中的 Host 標頭Host: www.example.com會修改為 8080

未啟用主機標頭保留,且接聽程式連接埠為預設連接埠 (連接埠 80 或 443) 時:對於預設的接聽程式連接埠 (連接埠 80 或 443),我們不會將連接埠號碼附加至傳出主機標頭。已存在於傳入主機標頭中的任何連接埠號碼都會遭到移除。

下表顯示 Application Load Balancer 如何根據接聽程式連接埠處理HTTP請求中的主機標頭的更多範例。

接聽程式連接埠 範例請求 請求中的主機標頭 主機標頭保留已停用 (預設行為) 主機標頭保留已啟用
請求會在預設 HTTP/HTTPS 接聽程式上傳送。 GET /index.html HTTP/1.1 Host: example.com example.com example.com example.com
請求會在預設HTTP接聽程式上傳送,而主機標頭具有連接埠 (例如 80 或 443)。 GET /index.html HTTP/1.1 Host: example.com:80 example.com:80 example.com example.com:80
請求具有絕對路徑。 GET https://dns_name/index.html HTTP/1.1 Host: example.com example.com dns_name example.com
在非預設接聽程式連接埠上傳送請求 (例如 8080) GET /index.html HTTP/1.1 Host: example.com example.com example.com:8080 example.com
在非預設接聽程式連接埠上傳送請求,並且主機標頭具有連接埠 (例如 8080)。 GET /index.html HTTP/1.1 Host: example.com:8080 example.com:8080 example.com:8080 example.com:8080
使用主控台啟用主機標頭保留
  1. 在 開啟 Amazon EC2主控台https://console.aws.amazon.com/ec2/

  2. 在導覽窗格中,選擇 Load Balancers (負載平衡器)

  3. 選取負載平衡器。

  4. 屬性索引標籤中,選擇編輯

  5. 封包處理下方,開啟保留主機標頭

  6. 選擇 Save changes (儲存變更)。

使用 啟用主機標頭保留 AWS CLI

使用 routing.http.preserve_host_header.enabled 屬性設定為 的 modify-load-balancer-attributes命令true