最近使用cloudflare做網站的外圍cdn,出現過很多次5XX錯誤,匯總信息如下:

診斷并解決 Cloudflare 代理的站點的 5XX 錯誤。

本文內容

  • [概述]
  • [錯誤分析]
  • [Error 500: internal server error]
  • [Error 502 bad gateway 或 Error 504 gateway timeout]
  • [Error 503: service temporarily unavailable]
  • [Error 520: web server returns an unknown error]
  • [Error 521: web server is down]
  • [Error 522: connection timed out]
  • [Error 523: origin is unreachable]
  • [Error 524: a timeout occurred]
  • [錯誤 525:SSL 握手失敗]
  • [Error 526: invalid SSL certificate]
  • [527 錯誤:Railgun Listener 至源站錯誤]
  • [Error 530]

概述

在排查 5XX 錯誤時,正確的操作步驟是先聯系您的主機提供商或站點管理員來排除故障并收集數據。

Cloudflare 支持僅協助域所有者解決問題。如果您是網站訪問者,請聯系網站所有者。

需要向主機提供商提供的錯誤詳情

  1. 具體的 5XX 錯誤代碼和消息
  2. 發生 5XX 錯誤的時間和時區
  3. 造成 HTTP 5XX 錯誤的 URL(例如:HTTPS://www.example.com/images/icons/image1.png

錯誤原因未必都能在源站錯誤日志中找到。請檢查 Cloudflare 和源站 Web 服務器之間的所有負載平衡器、緩存、代理或防火墻。

下方的各個錯誤描述中列出了應向主機提供商或站點管理員提供的其他詳情。Cloudflare Custom Error Pages 可更改本文探討的默認錯誤頁面的外觀。


錯誤分析

每個域的錯誤分析可在您的帳戶的支持門戶中獲得。通過錯誤分析,您可以按 HTTP 錯誤代碼深入了解總體錯誤情況,它還提供了診斷和解決問題所需的 URL、響應、源站 IP 地址和 Cloudflare 數據中心。錯誤分析基于的是 1% 的流量樣本。

要查看錯誤分析:

  • 導航到 Cloudflare 支持門戶。請參閱關于提交支持票證的說明,了解如何訪問支持門戶。
  • 往下滾動到錯誤分析部分。
  • 點擊查看錯誤分析
  • 輸入要調查的域。
  • 此時將顯示一段時間內的錯誤
  • 點擊圖表下方表格中的狀態代碼,展開流量錯誤詳情。

Error 500: internal server error

500 錯誤通常表示您的源站 Web 服務器存在問題。Error establishing database connection 是源站 Web 服務器生成的常見 HTTP 500 錯誤消息。聯系您的主機提供商來解決。

解決方案

向主機提供商提供詳細信息,協助對問題進行故障排除。

不過,如果 500 錯誤的 HTML 響應代碼中包含“cloudflare”或“cloudflare-Nginx”,請將以下信息提供給 Cloudflare 支持:

  1. 您的域名
  2. 發生 500 錯誤的時間和時區
  3. 觀察到 500 錯誤的瀏覽器的 www.example.com/cdn-cgi/trace 輸出(將 www.example.com 替換為您實際的域名和主機名)。

如果發現訪問您的網站時顯示空白頁,請確認問題是否在暫停 Cloudflare 時發生,并聯系您的主機提供商尋求幫助。


Error 502 bad gateway 或 Error 504 gateway timeout

當 Cloudflare 無法與您的源站 Web 服務器建立聯系時,會發生 HTTP 502 或 504 錯誤。

可能的原因有兩種:

  • (最常見原因)502/504 源自您的源站 Web 服務器
  • 502/504 源自 Cloudflare

502/504 源自您的源站 Web 服務器

當您的源站 Web 服務器標準的 HTTP 502 網關損壞或 504 網關超時錯誤響應時,Cloudflare 將返回帶有 Cloudflare 標志的 HTTTP 502 或 504 錯誤:

瀏覽器errconnectionrefused紫鳥超級瀏覽器插圖

解決方案

聯系您的主機提供商,在您的源站 Web 服務器上排查這些常見的原因:

  • 確保在請求生成生成 502 或 504 錯誤的訪問者 URL 中的主機名和域名時,源站服務器能夠響應請求。
  • 調查服務器過載、崩潰或網絡故障。
  • 識別發生超時或被阻止的應用程序或服務。

502/504 源自 Cloudflare

源自 Cloudflare 的 502 或 504 錯誤如下方所示:

瀏覽器errconnectionrefused紫鳥超級瀏覽器插圖1

如果錯誤未提及“cloudflare”,請聯系主機提供商來尋求與源自源站的 502/504 錯誤相關的幫助。

解決方案

為避免處理您的查詢時發生延遲,請向 Cloudflare 支持提供以下必要詳情:

  1. 發生問題的時間和時區
  2. 造成 HTTP 502 或 504 錯誤的 URL(例如:https://www.example.com/images/icons/image1.png
  3. 瀏覽 www.example.com/cdn-cgi/trace 時的輸出(將 www.example.com 替換為導致 HTTP 502 或 504 錯誤的域名和主機名)

Error 503: service temporarily unavailable

HTTP 錯誤 503 在源站 Web 服務器過載時發生。 可能的原因有兩種,可通過錯誤消息來辨別:

  • 錯誤的 HTML 響應正文中不包含“cloudflare”或“cloudflare-nginx”。

解決方案:聯系您的主機提供商,以核實是否針對您的源站 Web 服務器的請求實施了速率限制。

  • 錯誤的 HTML 響應正文中包含“cloudflare”或“cloudflare-nginx”。

解決方案:Cloudflare 數據中心中發生了連接問題。向 Cloudflare 支持提供以下信息:

  1. 您的域名
  2. 發生 503 錯誤的時間和時區
  3. 觀察到 503 錯誤的瀏覽器的 www.example.com/cdn-cgi/trace 輸出(將 www.example.com 替換為您實際的域名和主機名)。

Error 520: web server returns an unknown error

當源站服務器向 Cloudflare 返回空白、未知或意外響應時,會發生 520 錯誤。

解決方案

在進一步調查 520 錯誤期間采用以下快速解決辦法:將 Cloudflare DNS 應用中的記錄設為“僅限 DNS”,或暫停 Cloudflare。

聯系您的主機提供商或站點管理員,請他們核查您的源站 Web 服務器日志中的崩潰并檢查以下常見原因:

  • 源站 Web 服務器應用程序崩潰
  • 您的源站上未允許 Cloudflare IP。
  • 標頭超過 16 KB(通常因為 Cookie 數量過多)
  • 源站 Web 服務器的空響應中缺少 HTTP 狀態代碼或響應正文
  • 缺少響應標頭或源站 Web 服務器未返回
  • 正確的 HTTP 錯誤響應
    • 在從上游讀取響應標頭時,上游過早地關閉了連接,這是我們在日志中可能注意到的一個常見錯誤。這表明源站 Web 服務器有問題,導致Cloudflare 生成 520 錯誤。

520 錯誤普遍發生于造成源站 Web 服務器崩潰的 PHP 應用程序。

如果在聯系主機提供商或站點管理員后仍然出現 520 錯誤,請向 Cloudflare 支持提供以下信息:

  • 發生錯誤時所請求資源的完整 URL
  • 520 錯誤消息中的 Cloudflare cf-ray
  • 來自 http://www.example.com/cdn-cgi/trace 時的輸出(將 www.example.com 替換為您發生 520 錯誤時的您的域名和主機名)
  • 兩個
  • HAR 文件
    • 一個在您網站上啟用了 Cloudflare 時生成
    • 另一個在臨時禁用 Cloudflare 后生成。

Error 521: web server is down

源站 Web 服務器拒絕來自 Cloudflare 的連接時,會發生 521 錯誤。源站上的安全解決方案可能阻止了來自某些 Cloudflare IP 地址的合法連接。

521 錯誤的兩個最常見原因:

  • 源站 Web 服務器應用程序離線
  • Cloudflare 請求被阻止

解決方案

聯系您的站點管理員或主機提供商以排除這些常見原因:

  • 確保您的源站 Web 服務器正常響應
  • 查看源站 Web 服務器錯誤日志,以確定 Web 服務器應用程序崩潰或中斷。
  • 確認沒有阻止 Cloudflare IP 地址或對其施加速率限制
  • 在您的源站 Web 服務器的防火墻或其他安全軟件中允許所有 Cloudflare IP 范圍
  • 確認您是否將 SSL/TLS 模式設置為 FullFull (Strict),以及您是否安裝了 Cloudflare Origin 證書
  • 查找 Cloudflare 社區的更多故障排除信息。

Error 522: connection timed out

Cloudflare 聯系源站 Web 服務器時超時會發生 522 錯誤。 有兩種不同的錯誤導致 HTTP 錯誤 522,具體取決于 Cloudflare 和源站 Web 服務器之間發生超時的時間:

  1. 在連接建立之前,源站 Web 服務器未在 Cloudflare 發送 SYN 后 15 秒內將 SYN + ACK 返回給 Cloudflare。
  2. 在連接建立之后,源站 Web 服務器未在 90 秒內確認(ACK)Cloudflare 的資源請求。

如果源站 Web 服務器在連接建立之后確認(ACK)了資源請求,但沒有及時發送響應,則發生 HTTP 524 錯誤。

解決方案

聯系您的主機提供商,從源站 Web 服務器上排查下列常見原因:

  • (最常見).htaccessiptables 或防火墻中阻止了 Cloudflare IP 地址或對其設置了速率限制。確認您的主機提供商允許 Cloudflare IP 地址。
  • 源站 Web 服務器過載或離線,因而丟棄了傳入的請求。
  • 源站 Web 服務器上禁用了 Keepalives 功能。
  • Cloudflare DNS 應用中的源站 IP 地址與主機提供商當前為您的源站 Web 服務器置備的 IP 地址不匹配。
  • 您的源站 Web 服務器上丟棄了數據包。

如果您使用的是 Cloudflare Pages,請確認您已經設置了自定義域,并且您的 CNAME 記錄指向您的自定義 Pages 域。如需了解如何設置自定義 Pages 域,請點擊此處。

如果上述原因都未能促成解決方案,請向主機提供商或站點管理員索取以下信息,然后聯系 Cloudflare 支持:

  • 從源站 Web 服務器到發生問題前最常連接您的源站 Web 服務器的 Cloudflare IP 地址的 MTR 或 traceroute 結果。在源站 Web 服務器日志記錄的 IP 中,找到一個可成功連接的 IP。
  • 來自主機提供商調查的詳細信息,如相關的日志或與主機提供商的對話。

Error 523: origin is unreachable

當 Cloudflare 無法聯系您的源站 Web 服務器時,會發生 523 錯誤。這通常在 Cloudflare 和源站 Web 服務器之間的網絡設備沒有通向源站 IP 地址的路由時發生。

解決方案 聯系您的主機提供商,在您的源站 Web 服務器上排查下列常見原因:

  • 確認您的 Cloudflare DNS 應用中為 A 或 AAAA 記錄列出了正確的源站 IP 地址。
  • 對源站與 Cloudflare 之間的互聯網路由問題進行故障排除,或者對源站本身的問題進行故障排除。

如果主機提供商經常更改該您的源站 Web 服務器 IP 地址,請參考有關動態 DNS 更新的 Cloudflare 文檔。

如果上述原因都未能促成解決方案,請向主機提供商或站點管理員索取以下信息:

  • 從源站 Web 服務器到發生問題前最常連接您的源站 Web 服務器的 Cloudflare IP 地址的 MTR 或 traceroute 結果。從源站 Web 服務器日志查找一個可連接的 Cloudflare IP。
  • 如果您通過 Cloudflare 托管服務合作伙伴使用 Railgun,請聯系您的主機提供商來排查 523 錯誤。
  • 如果您自己管理 Railgun 安裝,請提供以下信息:
    • 從 Railgun 服務器到源站 Web 服務器的 traceroute 結果。
    • 來自 Railgun 服務器的最新系統日志文件。

Error 524: a timeout occurred

524 錯誤表明 Cloudflare 成功連接了源服務器,但源站 Web 服務器沒有在默認的 100 秒連接超時結束前提供 HTTP 響應。如果源站服務器由于要做太多工作而花費太長時間(例如,大數據查詢),或者因為服務器在爭搶資源而無法及時返回任何數據,那么可能會發生這種情況。

解決方案

以下是我們建議的解決這一問題的方案:

  • 實施大型 HTTP 進程的狀態輪詢,以避免遇到該錯誤。
  • 聯系您的主機提供商
  • ,從您的源站 Web 服務器上排查下列常見原因:
    • 源站 Web 服務器上長時間運行的進程。
    • 發生過載的源站 Web 服務器。

源站 Web 服務器上記錄請求響應時間有助于辨別資源速度緩慢的原因。聯系您的主機提供商或站點管理員,以協助調整日志格式,或者搜索適用于您的 Web 服務器品牌(如 Apachenginx)的日志文檔。

  • Enterprise 客戶可以使用 proxy_read_timeout API 端點將 524 超時延長到最長 600 秒。
  • 如果您經常運行需要超過 100 秒才能完成的 HTTP 請求(例如大量數據導出),請在 Cloudflare DNS 應用中將這些進程移動到未由 Cloudflare 代理的子域后面。
  • 如果使用 Cloudflare Railgun 的域發生錯誤 524,請確保 lan.timeout 設置的值高于默認的 30 秒,再重啟 railgun 服務。

錯誤 525:SSL 握手失敗

525 錯誤表示 Cloudflare 與源站 Web 服務器之間的 SSL 握手失敗。滿足以下兩個條件時會發生 525 錯誤:

  1. Cloudflare 與源站 Web 服務器之間的 SSL 握手失敗,以及
  2. Cloudflare SSL/TLS 應用的概述選項卡中設置了 FullFull (Strict) SSL

解決方案

聯系您的主機提供商,從您的源站 Web 服務器上排查下列常見原因:

  • 未安裝有效的 SSL 證書
  • 未開啟 443 端口(或其他自定義安全端口)
  • 無 SNI 支持
  • Cloudflare 接受的加密套件與源站 Web 服務器支持的加密套件不匹配。

如果間歇性發生 525 錯誤,請查看源站 Web 服務器錯誤日志來確定原因。配置 Apache 以記錄 mod_SSL 錯誤。此外,nginx 的標準錯誤日志中包含 SSL 錯誤,但可能需要提高日志級別。

其他檢查

  • 檢查您的源站服務器上是否安裝了證書。您可以查看這篇文章,詳細了解如何運行一些測試。如果您沒有任何證書,你可以創建并安裝免費的 Cloudflare Origin CA 證書。使用 Origin CA 證書,您就加密 Cloudflare 與源站 Web 服務器之間的流量。
  • 檢查服務器使用的密碼套件以確保它們與 Cloudflare 支持的密碼套件匹配。
  • 根據看到的 525 的時間戳檢查服務器的錯誤日志,以確保有錯誤可能導致在 SSL 握手期間重置連接。

Error 526: invalid SSL certificate

滿足以下兩個條件時會發生 526 錯誤:

  1. Cloudflare 無法驗證您的源站 Web 服務器上的 SSL 證書;
  2. Cloudflare SSL/TLS 應用的概述選項卡中設置了 Full SSL (Strict) SSL

解決方案

在 Cloudflare SSL/TLS 應用的概述選項卡中將域的 SSL 設為 Full 而非 Full (strict),這可能是一種快速修復方法。

請您服務器管理員或主機提供商核查源站 Web 服務器的 SSL 證書,并進行以下驗證:

  • 證書沒有到期
  • 證書沒有撤銷
  • 證書由證書頒發機構簽名(而非自簽名)
  • 所請求的域名或目標域名和主機名列在證書的 Common NameSubject Alternative Name
  • 您的源站 Web 服務器接受通過 SSL 端口 443 進行連接
  • 暫停 Cloudflare 并訪問 https://www.sslshopper.com/ssl-checker.html#hostname=www.example.com(將 www.example.com 替換為您的主機名和域名),以驗源站 SSL 證書并無問題:
瀏覽器errconnectionrefused紫鳥超級瀏覽器插圖2

如果源站服務器使用自簽名證書,請將域配置為使用 Full SSL 而非 Full SSL (Strict)。請參考適用于您的源站的 SSL 推薦設置。


527 錯誤:Railgun Listener 至源站錯誤

527 錯誤表示 Cloudflare 和源站的 Railgun 服務器(rg-listener)之間發生連接中斷。常見的原因包括:

  • 防火墻干擾
  • Railgun 服務器和 Cloudflare 之間網絡故障或數據包丟失

如需其他詳細信息來協助故障排除,請提高 Railgun 日志級別。

527 錯誤的最常見原因包括:

  • 連接超時
  • 超過 LAN 超時
  • 連接遭拒
  • TLS/SSL 相關錯誤

如果要聯系 Cloudflare 支持,請提供以下來自 Railgun Listener 的信息:

  • railgun.conf 文件的完整內容
  • railgun-nat.conf 文件的完整內容內容
  • 詳述觀察到的錯誤的 Railgun 日志文件

連接超時

下列 Railgun 日志錯誤表明 Railgun Listener 和源站 Web 服務器之間存在連接故障:

connection failed 0.0.0.0:443/example.com:dial tcp 0.0.0.0:443: i/o timeout
no response from origin (timeout) 0.0.0.0:80/example.com

解決方案

聯系您的主機提供商,以協助測試源站 Web 服務器和 Railgun Listener 之間的連接問題。例如,運行 netcat 命令可以測試從 Railgun Listener 到源站 Web 服務器的 SERVERIPPORT(80 用于 HTTP,或 443 用于 HTTPS)的連接:

nc -vz SERVERIP PORT

超過 LAN 超時

如果源站 Web 服務器未在 30 秒默認超時內向 Railgun Listener 發送 HTTP 響應,則生成以下 Railgun Listener 日志錯誤:

  connection failed 0.0.0.0:443/example.com: dial tcp 0.0.0.0:443: i/o timeout

可以通過 railgun.conf 文件的 lan.timeout 參數調整這一時間。

解決方案

提高 railgun.conf 中的 lan.timeout 限值,或檢查 Web 服務器配置。聯系您的主機提供商,以確認源站 Web 服務器是否過載。

連接遭拒

當來自 Railgun Listener 的請求遭到拒絕時,Railgun 日志中會出現以下錯誤:

Error getting page: dial tcp 0.0.0.0:80:connection refused

解決方案

允許 Railgun Listener 的 IP 處于源站 Web 服務器的防火墻中。

TLS/SSL 相關錯誤

如果 TLS 連接失敗,Railgun 日志中會出現以下錯誤:

connection failed 0.0.0.0:443/example.com:remote error: handshake failure
connection failed 0.0.0.0:443/example.com:dial tcp 0.0.0.0:443:connection refused
connection failed 127.0.0.1:443/www.example.com:x509: certificate is valid for
example.com,www.example.com

解決方案

如果發生 TLS/SSL 錯誤,請在源站 Web 服務器上檢查并確保:

  • 已開啟 443 端口
  • 源站 Web 服務器出示了 SSL 證書
  • 源站 Web 服務器的 SSL 證書的 SAN 或 Common Name 中包含請求的主機名或目標主機名
  • 在 Cloudflare SSL/TLS 應用的概述選項卡中將 SSL 設為 Full 或 Full (Strict)

如果源站 Web 服務器 SSL 證書采用自簽名,請在 railgun.conf 中設置 validate.cert=0


Error 530

返回 HTTP 錯誤 530 時會同時顯示 1XXX 錯誤。后續我會總結,以了解故障排除信息。