如何對 CloudFront 中的 504 錯誤進行疑難排解?

2 分的閱讀內容
0

我正在使用 Amazon CloudFront 分發來提供內容。然而,檢視者嘗試透過 Web 瀏覽器存取內容時會收到 504 錯誤。我該如何解決這些錯誤?

簡短描述

CloudFront 會傳回兩種類型的 504 錯誤:

  • 來源傳回錯誤時,會發生 504: "Gateway Time-out" (504:「閘道逾時」) 錯誤,然後透過 CloudFront 傳遞給檢視器。
  • 來源在指定時間範圍內沒有回應 CloudFront 且請求因此過期時,會發生 504: "The request could not be satisfied" (504:「無法滿足請求」) 錯誤。

根據您收到的錯誤訊息,請參閱相關解決方案章節。

解決方案

504: "Gateway Time-out" (504︰「閘道逾時」) 錯誤

確認安全群組上已開啟正確的連接埠。

確定原始伺服器允許來自 CloudFront 的傳入流量,通常位於連接埠 443 或 80。

如果您的來源使用 Elastic Load Balancing,請檢閱 ELB 安全群組。請確定安全群組允許來自 CloudFront 的傳入流量。

確認原始伺服器防火牆是否允許 CloudFront 的連線

視乎您的作業系統,確認防火牆允許連接埠 443 和 80 的流量。

如果您正在使用 Redhat Linux View,請確認您的防火牆規則是否符合下列設定。

防火牆規則:

$ sudo firewall-cmd --permanent --zone=public --list-ports

永久新增規則:

$ sudo firewall-cmd --permanent --zone=public --add-port=80/tcp       
$ sudo firewall-cmd --permanent --zone=public --add-port=443/tcp

如果您正在使用 Ubuntu Linux,請確認您的防火牆規則是否符合下列設定。

Ubuntu Linux View 防火牆規則:

$ sudo ufw status verbose

永久新增規則:

$ sudo ufw allow 80
$ sudo ufw allow 443

如果您在 Windows 伺服器上使用 Windows 防火牆,則請參閱 Microsoft 文件中的新增或編輯防火牆規則

確定您的自訂伺服器可透過網際網路存取

如果 CloudFront 無法透過網際網路存取您的來源,則 CloudFront 會傳回 504 錯誤。若要查看網際網路流量是否可連線至您的來源,請確認您的 HTTP 和 HTTPS 規則符合以下設定。

針對 HTTPS 流量:

nc -zv OriginDomainName/IP_Address 443
telnet OriginDomainName/IP_Address 443

針對 HTTP 流量:

nc -zv OriginDomainName 80
telnet OriginDomainName 80

504: "The request could not be satisfied" (504:「無法滿足請求」) 錯誤

測量 Web 應用程式的典型和高負載延遲

使用下列命令來測量 Web 應用程式的回應速度:

curl -w "DNS Lookup Time: %{time_namelookup} \nConnect time: %{time_connect} \nTLS Setup: %{time_appconnect} \nRedirect Time: %{time_redirect} \nTime to first byte: %{time_starttransfer} \nTotal time: %{time_total} \n" -o /dev/null https://www.example.com/yourobject

注意︰若是 https://www.example.com/yourobject ,請輸入您正在測試的 Web 應用程式的 URL。

輸出類似於以下內容:

DNS Lookup Time: 0.212319   
Connect time: 0.371254   
TLS Setup: 0.544175  
Redirect Time: 0.000000   
Time to first byte: 0.703863   
Total time: 0.703994

視乎請求的位置,對顯示高延遲的步驟進行疑難排解。

新增資源或調整伺服器和資料庫

請確定您的伺服器有足夠的 CPU、記憶體和磁碟空間來處理檢視者要求。

在後端伺服器上設定持續連線。必須為後續請求重新建立連線時,這些連線有助於改善延遲。

調整 CloudFront 逾時值

如果之前的疑難排解步驟無法解決 HTTP 504 錯誤,則請更新分發中針對來源回應逾時指定的時間


相關資訊

HTTP 504 狀態碼 (閘道逾時)

AWS 官方
AWS 官方已更新 2 年前