HTTP 504 狀態碼(閘道逾時) - Amazon CloudFront

文章推薦指數: 80 %
投票人數:10人

導致伺服器逾時發生的原因通常是等候應用程式回應的時間過長,或是設定的逾時值過短。

直接為分佈設定較高CloudFront 逾時值,就能快速修正,協助避免HTTP 504 錯誤的 ... HTTP504狀態碼(閘道逾時)-AmazonCloudFrontAWS文件AmazonCloudFront開發人員指南設定原始伺服器的防火牆來允許CloudFront流量設定原始伺服器的安全群組來允許CloudFront流量設定您的自訂原始伺服器可從網際網路存取尋找和修正原始伺服器上應用程式的延遲回應HTTP504狀態碼(閘道逾時)HTTP504狀態碼(閘道逾時)代表當CloudFront將請求轉送回到原始伺服器時(因為請求的物件未在節點快取中)發生了下列其中一個事件: 原始伺服器將HTTP504狀態碼傳回CloudFront。

原始伺服器未在請求過期之間回應。

當流量受到防火牆或安全群組封鎖而無法傳入原始伺服器,或是無法從網際網路存取該原始伺服器,則CloudFront將傳回HTTP504狀態碼。

請先查看這些問題。

如果可以正常存取,則探索應用程式延遲和伺服器逾時,就能判定問題並進行修正。

主題設定原始伺服器的防火牆來允許CloudFront流量設定原始伺服器的安全群組來允許CloudFront流量設定您的自訂原始伺服器可從網際網路存取尋找和修正原始伺服器上應用程式的延遲回應設定原始伺服器的防火牆來允許CloudFront流量 如果原始伺服器防火牆封鎖CloudFront流量,則CloudFront會傳回HTTP504狀態碼,所以最好先確認問題不在於此,再檢查其他可能的問題。

用於判斷防火牆是否有問題的方法,將依原始伺服器使用的系統類型而定: 如果是在Linux伺服器使用IPTable防火牆,則您可以搜尋工具和資訊來協助您處理IPTable。

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

當您在評估原始伺服器的防火牆組態時,請查看是否有任何因已發布IP地址範圍而導致CloudFront節點流量遭到封鎖的防火牆或安全規則。

如果允許CloudFrontIP地址範圍連線至您的原始伺服器,請務必更新伺服器安全性規則以納入變更。

您可以訂閱AmazonSNS主題,即可在IP地址範圍檔案更新時收到通知。

在收到通知後,您可以使用程式碼來擷取檔案及進行剖析,並為您的本機環境進行調整。

如需詳細資訊,請參閱AWS新聞部落格上的透過AmazonSNS訂閱AWS公有IP地址變更。

設定原始伺服器的安全群組來允許CloudFront流量 如果原始伺服器使用ElasticLoadBalancing,請檢閱ELB安全群組,確保安全群組允許從CloudFront傳入流量。

您還可以使用AWSLambda,自動更新您的安全群組,允許從CloudFront傳入流量。

設定您的自訂原始伺服器可從網際網路存取 如果CloudFront無法存取自訂原始伺服器的原因出於此伺服器並未在網際網路上公開提供,CloudFront將傳回HTTP504錯誤。

CloudFront節點是經由網際網路連接到原始伺服器。

如果您的自訂原始伺服器位於私有網路,則CloudFront無法與其連線。

基於上述原因,您不能使用包括內部ClassicLoadBalancer等私有伺服器來做為搭配CloudFront的原始伺服器。

若要檢查網際網路流量是否可以連接到您的原始伺服器,請執行以下命令(其中的OriginDomainName是指伺服器的網域名稱): 檢查HTTPS流量時: nc-zvOriginDomainName443telnetOriginDomainName443 檢查HTTP流量時: nc-zvOriginDomainName80telnetOriginDomainName80 尋找和修正原始伺服器上應用程式的延遲回應 導致伺服器逾時發生的原因通常是等候應用程式回應的時間過長,或是設定的逾時值過短。

直接為分佈設定較高CloudFront逾時值,就能快速修正,協助避免HTTP504錯誤的發生。

但是,我們建議您先排除任何與應用程式和原始伺服器有關的效能和延遲問題。

接著您可以設定合理的逾時值,協助避免HTTP504錯誤的發生,並且正確回應使用者。

下面內容概要說明了如何找出效能問題並加以更正的步驟: 測量Web應用程式的一般負載和高負載延遲(回應能力)。

視需要新增額外的資源,例如CPU記憶體。

採取其他步驟來解決問題,例如調校資料庫查詢以配合高負載情況。

視需要調整CloudFront分佈的逾時值。

以下是每個步驟的詳細資訊。

測量一般負載和高負載延遲 若要判斷一台或多台後端Web應用程式伺服器是否發生高度延遲,請在每台伺服器上執行下列Linuxcurl命令: curl-w"Connecttime:%{time_connect}Timetofirstbyte:%{time_starttransfer}Totaltime:%{time_total}\n"-o /dev/nullhttps://www.example.com/yourobject 注意如果伺服器執行Windows,您可以搜尋和下載適用於Windows的Curl,執行類似的命令。

在測量和評估伺服器中執行應用程式的延遲情況時,請注意以下資訊: 延遲值會因應每個應用程式而有不同。

不過,相對於幾秒鐘或更久時間,幾毫秒的第一個位元組的時間才算正常。

如果在一般負載時測出的應用程式延遲時間正常,這時應注意,檢視器在高負載情況下仍然可能遇到逾時問題。

當出現高需求量時,伺服器可能會延遲回應或毫無回應。

為了協助防止高負載延遲問題,請檢查您的伺服器的資源,例如CPU、記憶體和磁碟讀取和寫入,確保您的伺服器有足夠容量可因應高負載進行擴展。

您可以執行以下Linux命令,檢查Apache程序所使用的記憶體: watch-n1"echo-n'ApacheProcesses:'&&ps-Capache2--no-headers|wc-l&&free-m" 伺服器的高CPU使用率可能大幅降低應用程式的效能。

如果後端伺服器使用AmazonEC2執行個體,請檢閱伺服器的CloudWatch指標以檢查CPU使用率。

如需詳細資訊,請參閱AmazonCloudWatch使用者指南。

若是使用您自己的伺服器,請參閱伺服器說明文件,以取得如何檢查CPU使用率。

請檢查高負載時的其他潛在問題,例如,若有大量請求時,資料庫查詢的執行速度就會變慢。

新增資源,並調校伺服器和資料庫 在評估過應用程式和伺服器的回應能力後,確保您有足夠的資源可供一般流量和高負載情況使用: 如果您有自己的伺服器,請根據您的評估,確定伺服器具備足夠的CPU、記憶體和磁碟空間來處理檢視器的請求。

如果使用AmazonEC2執行個體做為後端伺服器,請確保該執行個體類型具備執行傳入請求的適當資源。

如需細資訊,請參閱AmazonEC2使用者指南中的執行個體類型。

此外,請考慮以下調校步驟,以避免發生逾時: 如果Curl命令傳回的TimetoFirstByte值看似很高,請採取適當步驟以提升應用程式的效能。

提升應用程式回應能力將有助於減少逾時錯誤。

調校資料庫查詢以確保其可處理大量請求,且不會降低效能。

在您的後端伺服器上設定keep-alive(persistent)(保持活動(持續))連線。

當伺服器必須為後續請求或使用者重新建立連線時,此選項可避免此時發生延遲。

如果您使用ELB做為原始伺服器,請參閱以下知識中心文章:如何在我的ELBClassicLoadBalancer上疑難排解高延遲?,了解如何減少延遲問題。

視需要調整CloudFront逾時值 如果已評估並解決應用程式效能緩慢問題、原始伺服器容量和其他問題,但檢視器仍然遇到HTTP504錯誤,這時您應該考慮變更在分佈中的原始伺服器回應逾時指定時間。

如需進一步了解,請參閱回應逾時(僅限自訂原始伺服器)。

文件慣用形式HTTP503狀態碼(服務無法使用)負載測試CloudFront此頁面是否有幫助?-是感謝您,讓我們知道我們做得很好!若您有空,歡迎您告知我們值得讚許的地方,這樣才能保持良好服務。

此頁面是否有幫助?-否感謝讓我們知道此頁面仍須改善。

很抱歉,讓您失望。

若您有空,歡迎您提供改善文件的方式。



請為這篇文章評分?