我正在使用 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
注意︰若是 ,請輸入您正在測試的 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 狀態碼 (閘道逾時)