如何使用 Elastic Load Balancing 來疑難排解無法存取我的網站的原因?

上次更新日期:2022 年 4 月 7 日

使用者無法存取我的網站。如何使用 Elastic Load Balancing (ELB) 來了解為什麼最終使用者無法存取我的網站?

簡短描述

有很多原因會導致您無法存取您的網站。若想找到疑難排解的最佳途徑,請先回答以下問題:

  • 是否無法存取網站,而您是否收到瀏覽器預設逾時頁面?
  • 問題是否間歇性發生?
  • 頁面是否延遲載入?
  • 頁面是否顯示像 HTTP 5XX 之類的錯誤?

解決方案

執行 DNS 查詢和比較

確認面臨此問題的網域可正確解析為負載平衡器節點的 IP 地址。這可確保用戶端嘗試的連線被傳送到正確的 IP 地址。

1.    執行 DNS 查詢:

dig <affected domain>

nslookup <affected domain>

2.    現在,對負載平衡器的 DNS 執行 DNS 查詢以進行比較。例如:

dig lb-xxxxxxxxxx.us-east-1.elb.amazonaws.com

如果 IP 地址清單相符,則此檢查成功。如果負載平衡器處於橫向擴展狀態,則可能有太多 IP 地址,單一 DNS 回應無法完全顯示。在此使用案例中,這個比較可能不夠。您可能需要執行多次 DNS 查詢,才能列出全部 IP。

檢查後端/目標的狀態

檢查後端/目標運作狀態檢查狀態。負載平衡器具有設定好的運作狀態檢查狀態,用於檢查後端/目標的狀態。根據負載平衡器的類型,運作狀態不佳的後端/目標可能會影響路由。根據類型檢查負載平衡器的運作狀態:

注意:

  • 啟用或停用跨區域,可能會影響使用 NLB 和 CLB 路由請求的方式。
  • 您可以在流量連接埠以外的連接埠上,設定運作狀態檢查。在這種情況下,即使目標/後端的運作狀態良好,目標也可能無法回應傳送到它的流量。

如果運作狀態檢查顯示目標的運作狀態不佳,則服務可能會在目標/後端執行個體處停止執行。或者,負載平衡器無法從目標/後端執行個體取得回應。

直接連線到負載平衡器的節點

直接連線到負載平衡器的節點。此測試會確認是否可存取先前已解析 DNS 之負載平衡器的所有 IP 地址。此測試也會確認問題是否僅發生在特定可用區域 (AZ) 的子網路中。

記下負載平衡器的 IP 地址,然後一次一個,嘗試連線到這些 IP 地址。由於憑證驗證和主機標頭,使用瀏覽器進行此測試可能無法正常運作。因此,建議改為使用 curl 工具,使用此格式執行此檢查。請注意,您必須將 <protocol>、<ELB IP Address>、<port>、<path> 和 <domain name> 更換為您 Web 設定中的正確值。

curl -lvk <protocol>://<ELB IP Address>:<port>/<path> -H "Host: <domain name>"

例如:

Eg: curl -lvk https://3.2.1.1:443/test -H "Host: example.com"

如果您的嘗試獲得回應,請檢查這是預期回應還是錯誤。如果回應令人滿意,請檢查下一個 IP 地址。

檢查負載平衡器的後端/目標問題

如果您確認可連線到負載平衡器使用的所有 IP 地址,則請接著確認負載平衡器與目標/後端的通訊狀態。

1.    首先,檢查安全群組、網路 ACL 和路由。

2.    如果這些項目允許存取,則登入到目標/後端。建立存取權限後,請使用此命令確認 Web 服務正在接聽設定的連接埠。將 “port" 更換為目標/後端的接聽連接埠。這是將目標/後端註冊到負載平衡器時所使用的連接埠。

Windows:

netstat -an | findstr "LISTEN" | findstr "port"

Linux:

netstat -an | grep LISTEN | grep "port"

3.    如果在提到預期的接聽連接埠後沒看到列出任何內容,則表示 Web 服務關閉。繼續對服務狀態進行疑難排解。

4.    如果回應顯示連接埠正在接聽,則嘗試使用 curl 連線到該連接埠。將 <protocol> 更換為接聽應用程式服務,以及將 <port> 更換為 localhost 連接埠:

curl -lvk <protocol>://localhost:<port>

如果您從此命令獲得回應,則您的 Web 服務正在執行。在此測試階段,您可以從相同 Amazon Virtual Private Cloud (Amazon VPC) 中的另一個 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體啟動連線。檢查此嘗試能否連線並從 Web 服務獲得回應。此回應也會顯示當您嘗試連線到目標/後端時,負載平衡器收到的內容。