使用者無法存取我的網站。如何使用 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 服務獲得回應。此回應也會顯示當您嘗試連線到目標/後端時,負載平衡器收到的內容。
相關資訊
如何對託管在 EC2 執行個體上網站無回應問題進行疑難排解?