如何修復 WordPress 網站上的 504 網關超時錯誤

已發表: 2020-10-26

504 網關超時錯誤是網站所有者和網站訪問者面臨的最常見的 HTTP 5xx錯誤之一。 對於許多 WordPress 博客和電子商務平台而言,了解如何修復此類服務器錯誤對於防止來之不易的訪問者跳到競爭對手的網站至關重要。

由於 504 Gateway Timeout 錯誤不會告訴您它發生的原因,因此很難確定導致服務器超時的原因。 本文將幫助您詳細了解它,了解如何診斷其原因,然後進行修復。

在嘗試了帖子中提到的所有各種解決方案後,您的網站應該立即啟動並運行。

聽起來不錯? 讓我們潛入吧!

喜歡看視頻版?

504 網關超時錯誤是網站所有者和網站訪問者面臨的最常見的 HTTP 5xx 錯誤之一。 了解如何使用本指南快速修復它。 點擊推

什麼是 504 網關超時錯誤?

每次您在瀏覽器中訪問網站時,瀏覽器都會向託管該網站的 Web 服務器發送一個請求。 服務器處理請求並使用請求的資源進行響應。

HTTP 請求和響應如何工作的圖示
HTTP 請求和響應如何工作。

服務器響應包括許多 HTTP 狀態代碼之一,用於向瀏覽器指示響應的狀態。 但並非所有這些 HTTP 狀態代碼都是錯誤。 例如,200 OK 狀態碼意味著服務器成功處理了請求並且“一切正常”。

5xx類HTTP狀態碼表示服務器有問題,服務器知道,不能執行客戶端請求。 因此,它們也被稱為服務器錯誤 5xx狀態代碼。

官方在 5xx 類下指定了五個狀態碼(500、501、502、503、504)。 您也可能會遇到許多非官方代碼(506、507、509、520 等)。

互聯網工程任務組 (IETF) 將 504 網關超時錯誤定義為:

504(網關超時)狀態代碼表示服務器在充當網關或代理時,沒有收到來自它需要訪問以完成請求的上游服務器的及時響應。

為了進一步簡化,當兩個服務器參與處理請求時會發生此錯誤。 第一個服務器(通常是主服務器)超時,等待來自第二個服務器(上游服務器)的響應。

504 網關超時錯誤以各種形式表現出來。 以下是它通常出現的一些方式:

Chrome 瀏覽器中的 HTTP ERROR 504
Chrome 瀏覽器中的“HTTP 錯誤 504”。

504 Gateway Timeout 錯誤與 502 Bad Gateway 錯誤類似,表示第一台服務器收到第二台服務器(上游服務器)的無效響應。

Chrome DevTools 中的 504 GATEWAY TIMEOUT 狀態代碼
Chrome DevTools 中的“504 GATEWAY TIMEOUT”狀態代碼。

504 網關超時錯誤的變種

瀏覽器會在其中顯示任何 504 Gateway Timeout 錯誤,就像任何其他錯誤一樣。 由於存在各種操作系統、Web 服務器、瀏覽器和用戶代理,它可以以多種方式出現。

以下是您可能會遇到的一些常見的 504 錯誤消息變體:

  • 504網關超時
  • 504 網關超時 NGINX
  • NGINX 504 網關超時
  • 網關超時錯誤
  • 錯誤 504
  • HTTP 錯誤 504
  • HTTP 錯誤 504 - 網關超時
  • HTTP 504
  • 504 錯誤
  • 網關超時 (504)
  • 此頁面無法正常工作 - 域響應時間過長
  • 504 Gateway Time-out - 服務器沒有及時響應
  • 頁面請求被取消,因為完成時間過長
  • 網站訪問者:處理您的請求時出現問題,請在幾分鐘後重試。
  • 站點所有者:網關超時。 您應該訪問您的錯誤日誌以獲取更多信息。
  • 一個空白的白色屏幕

以上所有錯誤響應,雖然措辭不同,但都指向相同的 504 Gateway Timeout 服務器錯誤。

Web 服務器和網站可以自定義向用戶顯示 504 網關超時錯誤的方式。 其中一些可能很酷! 這是平息遊客失望的絕妙策略。

GitHub 自定義的 HTTP 504 錯誤頁面
GitHub 自定義的 HTTP 504 錯誤頁面。

504 網關超時錯誤對 SEO 的影響

所有 5xx 錯誤都會阻止網頁加載,從而損害用戶體驗。 因此,像谷歌這樣的搜索引擎會認真對待這些錯誤。 如果錯誤持續很長時間,甚至可能導致從搜索引擎結果中取消對該網頁的索引。

例如,當 Google 蜘蛛偶然發現 503 Service Unavailable 錯誤時,他們會明白這是一個臨時問題,因為它主要用於啟用站點維護模式。 因此,他們稍後會再次嘗試抓取該頁面。

504 網關超時錯誤不一定是暫時的,因為它可能是由於多種原因造成的。 如果您的站點僅關閉了幾分鐘,並且蜘蛛試圖每分鐘多次抓取它,它們將嘗試從緩存中提供該頁面。 他們甚至不會注意到它。

但是,如果您的網站宕機時間超過 6 小時或更長時間,那麼 Google 會將 504 錯誤視為您需要盡快修復的嚴重的網站範圍問題。 這會對您的 SEO 產生負面影響。

在 Google Search Console 中查看抓取錯誤
在 Google Search Console 中查看抓取錯誤

Google Search Console 是監控網站 HTTP 5xx 錯誤的最佳 SEO 工具之一。

504網關超時錯誤的原因

由於 504 錯誤是由於服務器之間的超時造成的,因此問題可能不在於客戶端的設備或 Internet 連接。 這還包括您的設備和連接。

504 Gateway Timeout 錯誤表示 Web 服務器等待另一台服務器響應的時間過長並且“超時”。 此超時可能有多種原因:另一台服務器運行不正常、過載或停機。

其他服務器不必總是在外部(例如 CDN、API 網關)。 它也可以是主 Web 服務器(例如反向代理服務器、數據庫服務器)中的類似服務器的實體。

如何修復 504 網關超時錯誤

在不了解 WordPress 站點的確切詳細信息(例如其服務器配置、託管計劃、第三方插件及其吸引的流量)的情況下,您可能會發現修復 504 網關超時錯誤令人沮喪和不知所措。

由於涉及到許多變量,我建議您從修復非常罕見的客戶端問題開始,然後轉向修復服務器端問題。 他們通常是 504 錯誤的罪魁禍首。

嘗試重新加載網頁

遇到 504 Gateway Timeout 錯誤時,您可以嘗試的第一件事是等待幾分鐘並嘗試重新加載頁面。

在大多數瀏覽器中,您可以按F5鍵盤快捷鍵刷新/重新加載網頁。 要在重新加載之前刪除頁面的瀏覽器緩存,您可以按CTRL+F5快捷鍵組合。

在 Chrome 瀏覽器中刷新網頁
在 Chrome 瀏覽器中刷新網頁

當您使用它時,您還可以嘗試在其他瀏覽器中加載該站點以排除該問題。 由於大多數 504 錯誤是由於服務器暫時超載造成的,因此使用此解決方案應該可以讓您的網站立即恢復。

如果等待並重新加載站點並不能解決 504 錯誤問題,您可以檢查站點是對所有人關閉還是僅對您關閉。 用於測試站點停機時間的兩個有用的在線工具是 Down for Everyone 或 Just Me 以及它現在就宕機了嗎?

在 Down 上測試 Kinsta.com 為所有人或只是我
在 Down 上測試 Kinsta.com 為所有人或只是我

重新啟動您的網絡設備

有時,調製解調器或路由器等網絡設備的問題可能會導致 504 網關超時錯誤。 重新啟動這些設備可以幫助您解決問題。

雖然您可以按任何順序關閉所有這些網絡設備,但重新打開它們的順序很重要。 通常,按照從互聯網服務提供商到您的主客戶端設備的連接順序,從“外向內”打開這些設備。

檢查您的代理設置

代理服務器位於您的設備和互聯網之間。 它主要用於通過向網站和網絡服務器(例如使用 VPN)隱藏私人信息(例如設備位置)來增強在線隱私。

雖然代理服務器很少會導致 504 錯誤,但不正確的代理服務器設置有時可能是原因。 您可以禁用代理服務器並嘗試重新加載網頁,看看它是否會修復錯誤。

更改 Windows 10 中的“代理”設置
更改 Windows 10 中的“代理”設置

大多數客戶端不使用代理服務,因此如果您確信自己不使用任何代理服務器,則可以跳過此步驟。 但是,您可能在不知情的情況下設置了它。 我建議您檢查設備和瀏覽器的代理設置以排除此原因。

DNS 問題

服務器端或客戶端(或兩者)上的 DNS 問題也可能導致 504 網關超時錯誤。

服務器端 DNS 問題的最可能原因是 FQDN(完全限定域名)沒有解析正確的 IP 地址或DNS 服務器沒有響應。 通常,當您剛剛將 WordPress 站點遷移到新的服務器或主機時,就會發生這種情況。 因此,等待域的 DNS 記錄完全傳播很重要,這可能需要長達 24 小時。

您可以使用 whatsmydns.net DNS Checker 或 DNSMap 等免費工具來查看您的 DNS 是否已在全球傳播。

在 whatsmydns.net 上檢查您的域的 DNS 傳播
在 whatsmydns.net 上檢查您的域的 DNS 傳播

要修復客戶端 DNS 問題,您可以嘗試刷新本地 DNS 緩存。 這就像清除瀏覽器緩存一樣,除了這裡,您正在從操作系統中刷新 DNS 緩存。

如果您使用的是 Windows,則可以通過打開命令提示符並輸入以下指令來刷新 DNS 緩存:

 ipconfig /flushdns
使用命令提示符刷新 DNS 緩存
在 Windows 中使用命令提示符刷新 DNS 緩存

您應該會看到“已成功刷新 DNS 解析器緩存”。 如果有效,請留言。

對於最新的 macOS 版本,您可以打開終端並運行以下命令:

 sudo killall -HUP mDNSResponder

該過程完成後,您不會在 macOS 中看到任何通知,但您可以通過將命令附加到您的自定義消息來更改它。

 sudo killall -HUP mDNSResponder; DNS Cache was cleared successfully

如果您使用的是較舊的 macOS 版本,則需要輸入的命令會根據您運行的 macOS 版本而有所不同。 更多細節可以參考 Kinsta 深度刷新 DNS 教程中的 macOS 部分。

如果您使用的是 Linux 操作系統,那麼該過程與 macOS 非常相似,因為即使 Linux 也使用終端作為其命令行界面。 由於有許多 Linux 發行版,您需要運行的確切命令可能因發行版而異。 您可以查看 Kinsta 的指南以獲取更多信息。

最後,您可以臨時更改客戶端 DNS 服務器。 默認情況下,您的 ISP 會自動為您分配 DNS 服務器。 但是您可以暫時將這些更改為公共 DNS IP。

您可以嘗試的一些可靠的 DNS 服務器是 Google Public DNS、Cloudflare 1.1.1.1、Quad9 DNS 和 Cisco OpenDNS。

在 Windows 10 中設置自定義 DNS 服務器
在 Windows 10 中設置自定義 DNS 服務器

暫時禁用您網站的 CDN

有時,問題也可能出在您的內容交付網絡 (CDN) 上。 如果無法訪問網站的源服務器,大多數 CDN 將嘗試從其緩存中提供整個網頁。

但是大多數 CDN 默認不啟用此功能,因為在大多數站點(例如 WordPress 管理儀表板)上緩存動態資產很複雜。

在 Cloudflare 中設置“緩存所有內容”頁面規則
在 Cloudflare 中設置“緩存所有內容”頁面規則

解決此問題的一種直接方法是暫時禁用您的 CDN。 例如,如果您使用免費的 CDN Enabler WordPress 插件將您的網站資產鏈接到 CDN URL,那麼您可以停用該插件並測試重新加載您的網站。

使用任何其他可用於連接 CDN 的插件也是如此(例如 WP Rocket、Breeze、W3 Total Cache)。

如果您無法訪問您網站的管理儀表板,您可以通過重命名插件的文件夾名稱通過 SFTP 禁用該插件。

通過重命名插件文件夾名稱通過 SFTP 禁用所有插件
通過重命名插件文件夾名稱通過 SFTP 禁用所有插件

Cloudflare 或 Sucuri 等提供完整代理服務的 CDN 在其邊緣服務器和您的源服務器之間有額外的防火牆。 因此,您在使用它們時可能會更頻繁地遇到 HTTP 5xx 錯誤。 它們中的大多數會緩存原始服務器返回的 5xx 錯誤,因此很容易對其進行故障排除。

Cloudflare 的免費計劃很容易引發 5xx 錯誤。 不幸的是,由於它是一個完整的代理服務,所以沒有快速的方法來禁用它。 但在你責怪 Cloudflare 之前,請知道 Cloudflare 顯示了 504 Gateway Timeout 錯誤的兩種變體。

Cloudflare 的 504 網關超時(變體 1)

當您站點的源服務器以標準 HTTP 504 響應響應時,Cloudflare 將向您顯示自定義 504 Gateway Timeout 錯誤屏幕。

Cloudflare 的自定義錯誤 504 屏幕
Cloudflare 的自定義錯誤 504 屏幕

在這裡,問題在於您的 Web 服務器,而不是 Cloudflare。 您可以嘗試使用下面提到的其他解決方案來修復它,或者聯繫您的託管服務提供商的支持以獲得技術幫助。

Cloudflare 的 504 網關超時(變體 2)

如果 Cloudflare 導致 504 Gateway Timeout 錯誤,錯誤屏幕將提及“cloudflare”,這是當前所有 Cloudflare 資產的標準服務器名稱。 通常,錯誤屏幕將顯示如下:

Cloudflare 導致的 504 Gateway Timeout 錯誤
Cloudflare 導致的 504 網關超時的錯誤屏幕

由於 Cloudflare 本身沒有響應,因此您不會在此處看到任何 Cloudflare 品牌的錯誤屏幕。

Cloudflare 很可能已經意識到了這個問題,並且已經在著手修復。 您可以通過查看 Cloudflare 系統狀態網頁來確認這一點。 或者,您可以聯繫 Cloudflare 支持以獲得更快的解決方案。

在 cloudflarestatus.com 檢查 Cloudflare 系統狀態
在 cloudflarestatus.com 檢查 Cloudflare 系統狀態

由於大量上傳,Cloudflare 出現 504 網關超時

您上傳到站點的大小也可能是服務器超時的原因。 Cloudflare 將 Free 和 Pro 計劃的上傳文件大小(每個 HTTP POST 請求)限制為僅 100 MB。

Cloudflare 對各種計劃的“最大上傳大小”限制
Cloudflare 對各種計劃的“最大上傳大小”限制

問題可能出在您的主機端或 Cloudflare。 您可以通過使用 DNS 主機文件繞過 Cloudflare 並再次嘗試上傳來找出確切原因。

如果您在 WordPress 中使用 Cloudflare,我建議使用他們的免費插件並從緩存中排除關鍵 URL(例如 WordPress 管理儀表板)。 您可以參考 Kinsta 關於如何為 WordPress 配置 Cloudflare 設置的詳細帖子。

建議閱讀:如何為 WordPress 設置 Cloudflare APO。

服務器問題(與您的主機核實)

服務器問題是面臨 504 網關超時錯誤的最常見原因之一。 由於大多數 WordPress 站點都託管在 Nginx 或 Apache 網絡服務器上,因此 Nginx 或 Apache 正在等待某事的響應並超時。

許多客戶來到 Kinsta 正是因為他們在其他 WordPress 主機上面臨的這個問題。 對話是這樣的:

我們每月有大約 10 萬訪問者,瀏覽量超過 20 萬。 目前,我們使用 ____ 託管,但由於服務器過載,我們經常遇到 504 錯誤。 我不喜歡____如何處理這個問題,我們還被告知我們將不得不盡快轉向他們的專門計劃,我認為這沒有必要。

由於服務器過載,高流量和電子商務網站更容易出現 504 錯誤,因為它們會生成許多不可緩存的請求。 但是,此問題可能會出現在任何網站上,包括簡單的博客。 許多房東會要求您升級到高級套餐來解決問題,這在大多數情況下是不必要的。

Kinsta 為每個站點使用 LXD 託管主機和編排的 LXC 軟件容器。 因此,每個 WordPress 站點都位於自己的隔離容器中,可以訪問運行它所需的所有軟件(Linux、Nginx、PHP、MySQL)。 這些資源是 100% 私有的,不與任何其他站點共享,甚至是您的站點。

大多數提供共享託管計劃的 WordPress 主機都沒有此功能。 因此,與您的服務器託管在同一台服務器上的高流量站點也可能導致您的站點拋出 504 錯誤。

除了隔離其容器中的每個站點外,Kinsta 還設計了其基礎架構以輕鬆處理數千個並發連接。 Kinsta 甚至在本地主機上託管 MySQL 數據庫,而不是遠程服務器。 這意味著機器之間沒有延遲,從而導致更快的查詢和更少的超時發生機會。

許多遷移到 Kinsta 的客戶看到整體加載時間大幅減少。

切換到 C2 後性能提升 212.5%。
切換到 C2 後性能提升 212.5%。

過載的服務器並不是服務器超時的唯一原因。 504 錯誤可能還有許多其他原因:

慢速服務器基礎設施

您用於託管 WordPress 站點的服務器可能沒有足夠的資源來處理負載。 這就像在使用了十年的 PC 上玩現代的圖形密集型視頻遊戲。

服務器只是掛斷了試圖為網站提供服務。 解決此問題的唯一方法是升級到具有更好基礎架構的服務器。 出於這個原因,即使是 Kinsta 最基本的 WordPress 託管計劃也將處理中等流量的靜態站點。

需要更多 PHP 工作者

PHP 工作者用於執行您的 WordPress 網站的代碼。 每月有 50,000 名訪問者的電子商務網站比具有相同流量的簡單博客需要更多的資源。 如果所有服務器的 PHP 工作者都忙,他們將建立一個隊列。

當隊列變得太大時,服務器會忽略舊請求,這可能會導致服務器拋出 504 網關錯誤。 您可以向您的主機詢問增加 PHP 工作人員的數量。 這將允許您的站點同時執行多個請求。

防火牆問題

您的服務器的防火牆可能有一些錯誤或不正確的配置。 也許,它的一些規則會阻止服務器正確建立連接。 要知道您的防火牆是否是罪魁禍首,您可以檢查服務器的錯誤日誌。

網絡連接問題

代理服務器和 Web 服務器之間的連接問題可能會導致響應 HTTP 請求的延遲。 如果您使用負載均衡器,它也可能存在網絡連接問題。

HTTP 超時

當 Web 服務器和客戶端之間的連接保持打開時間過長時,可能會發生 HTTP 超時。 對於 WordPress 網站,這通常在運行 WordPress 導入時發生。 解決此問題的一種方法是切換到更快的互聯網連接。

您還可以使用支持 WP-CLI 的工具直接在服務器上運行腳本,完全繞過 HTTP 連接。 例如,您可以使用 wp import WP-CLI 命令直接通過命令行界面運行 WordPress Importer 插件。

重要提示: 504 Gateway Timeout 錯誤類似於 503 Service Unavailable 錯誤或 502 Bad Gateway 錯誤。 但它們都是不同的。 如果您在 Kinsta 遇到 504 錯誤,請打開支持票以立即解決您的問題。

要自行監控站點的停機時間,您可以使用 updown.io 之類的工具。 它會通過向其發送 HTTP 請求來定期檢查您網站的狀態(或任何 URL)。 您可以將檢查頻率設置為 15 秒到 1 小時。 如果您的網站沒有正確響應,它會通過電子郵件或短信通知您。

使用 updown.io 監控您的網站
使用 updown.io 輕鬆監控您的網站

使用 updown.io 的每個帳戶,您都會獲得大量免費積分,但如果您正在尋找更便宜的替代品,您可以查看 WebGazer 或 UptimeRobot。 這兩種工具都將幫助您每 5 分鐘免費監控一次網站的正常運行時間。 對於大多數網站所有者來說,這已經足夠了。

WebGazer 網站監控工具的儀表板
WebGazer 網站監控工具的儀表板

監控您的網站將使您了解它的關閉頻率。 如果您使用的是共享託管服務提供商,這將特別有用。 大多數託管 WordPress 主機會自動為您處理此問題。 因此,總是建議和他們一起去。

有關詳細說明,請查看 Kinsta 關於託管 WordPress 託管重要性的帖子。

垃圾郵件、機器人或 DDoS 攻擊

惡意攻擊者可以通過發送過多和/或資源密集型請求使您的 Web 服務器陷入爬網狀態。 如果您的網站被機器人發送垃圾郵件或遭受 DDoS 攻擊,它可能會使您的服務器不堪重負,並導致許多真實用戶出現 504 網關超時錯誤。

您可以查看您的服務器流量和分析,看看您是否可以發現網站流量中的任何不規則模式。 如果您使用 Kinsta 託管您的網站,則可以通過轉到 MyKinsta Analytics 儀表板輕鬆查看此數據。

MyKinsta 分析儀表板
MyKinsta 分析儀表板

通過查看頂級客戶端 IP 開始您的調查。 它會讓您了解誰生成的請求數量最多,以及從哪裡生成。 如果您的服務器突然佔用大量帶寬或吸引大量流量,那麼此報告將非常方便。

在 MyKinsta 儀表板中查看“頂級客戶端 IP”
在 MyKinsta 儀表板中查看“頂級客戶端 IP”

接下來,您可以查看緩存分析報告。 在這裡,您可以看到有多少請求繞過或丟失緩存,或從緩存中獲得服務。 出於性能和穩定性的原因,您希望緩存盡可能多的請求,但並不總是可以實現這一點。

例如,WooCommerce 網站會為購物車和結賬流程等功能生成許多不可緩存的請求。

MyKinsta 中的“緩存分析”屏幕
MyKinsta 中的“緩存分析”屏幕

最後,您可以使用 WordPress 安全插件通過發現和阻止令人擔憂的流量/IP 來增強您網站的安全性。 您也可以要求您的主機阻止某些 IP。

因停機時間和 WordPress 問題而苦苦掙扎? Kinsta 是在設計時考慮到性能和安全性的託管解決方案! 查看我們的計劃

根據攻擊的長度和規模,這可能是一個將 IP 列入黑名單的永無止境的過程,因為許多攻擊者在被阻止後會更改其 IP 和代理地址。

注意: Kinsta 不允許其客戶安裝 WordPress 安全插件,因為它們會對網站的性能產生巨大影響,尤其是其掃描功能。 由於 Kinsta 將負載平衡器與 Google Cloud Platform 一起使用,因此阻止 IP 並不總是按預期工作。

您可以使用 Cloudflare 或 Sucuri 等專用安全解決方案來保護您的網站免受 DDoS 攻擊和垃圾郵件機器人的攻擊。 有關更多信息,您可以查看 Kinsta 關於如何在您的 WordPress 網站上安裝 Cloudflare 以及 Sucuri 如何幫助阻止 DDoS 攻擊的文章。

損壞的 WordPress 數據庫

有時,504 網關超時錯誤可能是由於數據庫損壞,尤其是在 WordPress 站點中。 通常,這是由於數據庫表或文件損壞所致。 有時,它也可能是由嚴重的安全問題引起的,例如您的網站或數據庫被黑客入侵。

修復損壞的 WordPress 數據庫取決於問題。 像 WP-DBManager 這樣的插件可以很容易地診斷和修復數據庫問題。 我建議您閱讀 Kinsta 關於修復 WordPress 數據庫問題的詳細演練以開始使用。

檢查您網站的插件和主題

大多數情況下,第三方插件和主題不會導致 504 錯誤。 但是它們可能導致服務器超時的可能性很小,通常是通過將插件/主題生成的許多未緩存請求排隊。 由於這會佔用您服務器的許多 PHP 工作人員,因此可能會導致 504 錯誤。

這個問題的一個很好的例子是 WooCommerce,這是一個為 WordPress 網站添加電子商務功能的插件。

解決此問題的最簡單方法是停用所有插件。 請記住,如果您只是停用插件,您不會丟失任何數據。

如果您可以訪問管理儀表板,則可以轉到插件屏幕,從批量操作菜單中選擇停用,選中所有插件,然後點擊應用按鈕。 這將禁用所有插件。

停用 WordPress 中的插件
通過 WP 管理儀表板停用所有 WordPress 插件

如果您無法訪問您的管理區域,您可以使用前面描述的方法通過 SFTP 禁用插件。 只需重命名主插件文件夾名稱即可批量禁用所有插件。

停用所有插件後,請檢查您的網站是否正確加載。 如果它有效,您必須激活每個插件,在啟用每個插件後測試站點。

最後,確保您的插件、主題和 WordPress 核心是最新的。 此外,請確保您的服務器正在運行推薦的 PHP 版本。

如果您覺得這太過分了,您可以隨時向您的房東尋求幫助。 Kinsta 使用 Kinsta APM 和其他故障排除技術來幫助客戶縮小可能導致錯誤的插件、查詢或腳本的範圍。

在最壞的情況下,例如插件/主題中的查詢效率低下或代碼錯誤,您可以聘請 WordPress 開發人員來解決問題。

檢查錯誤日誌

在對 WordPress 站點上的 504 錯誤進行故障排除和調試時,查看錯誤日誌非常有用。 這可以幫助您快速縮小網站上的問題範圍,尤其是當它是由您網站上要求苛刻的插件引起的時。

如果您是 Kinsta 客戶,您可以在 MyKinsta 儀表板的日誌查看器中輕鬆查看錯誤。

檢查 MyKinsta 儀表板中的錯誤日誌
檢查 MyKinsta 儀表板內的錯誤日誌

如果您的主機沒有日誌工具,那麼您可以通過將以下代碼添加到您的wp-config.php文件來啟用 WordPress 調試模式:

 define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false );

WP_DEBUG 常量啟用或禁用 WordPress 調試模式。 它有兩個可選的伴隨常量,可以擴展它的特性。 WP_DEBUG_LOG常量將所有錯誤指示保存到/wp-content/目錄中的debug.log文件中。 如果您沒有看到此文件,您可以隨時創建一個。

WP_DEBUG_DISPLAY常量控制調試日誌是否顯示在 HTML 頁面上。 將此設置為 false 將隱藏所有錯誤,但您可以稍後查看錯誤,因為您還將WP_DEBUG_LOG定義為 true。

重要提示:如果您在 Kinsta 環境中啟用了 WP_DEBUG,它會將所有錯誤路由到debug.log文件,而不是 MyKinsta 儀表板中的error.log

您還可以通過 SFTP 下載原始 WordPress 錯誤日誌文件。 通常,您可以在服務器根目錄中名為“logs”的文件夾中找到錯誤日誌。

通過 SFTP 訪問 WordPress 錯誤日誌文件夾
通過 SFTP 訪問 WordPress 錯誤日誌文件夾

Kinsta 用戶還可以從他們的 MyKinsta 儀表板啟用 WordPress 調試模式。 為此,請導航至站點 > 工具 > WordPress 調試,然後單擊啟用按鈕。 這將允許您查看 PHP 錯誤和通知,而無需通過 SSH 或 SFTP 啟用調試模式。

最後,您可以檢查服務器日誌文件。 根據您用於託管 WordPress 網站的服務器,它們通常位於以下位置:

  • 阿帕奇: /var/log/apache2/error.log/
  • Nginx: /var/log/nginx/error.log/

您可以參考 Apache 或 Nginx 的日誌記錄相關文檔以獲取更多信息。

正確配置 Apache 或 Nginx 設置

您可以編輯服務器配置文件以增加特定指令的資源限制。 這可以幫助您解決 504 網關超時錯誤。

對於 Apache 網絡服務器

首先,將以下代碼添加到您的httpd.conf

 TimeOut 600

此設置定義服務器在將某些請求標記為網絡超時問題之前將等待多長時間。 它的默認值為 60 秒(Apache 2.4 版本)。

您只能在httpd.conf文件中添加此指令,而不是在 .htaccess 文件中。 由於大多數共享主機提供商不允許您修改httpd.conf文件,因此您可以嘗試增加.htaccess文件中的 LimitRequestBody 指令的值。

然後將以下行添加到您的php.ini文件中:

 max_execution_time 300

PHP 的 max_execution_time 指令的默認值為 30 秒。 增加它將使您網站的 PHP 腳本運行時間更長。

對於 Nginx 網絡服務器

如果您在 Nginx + FastCGI 進程管理器 (PHP-FPM) 上運行 WordPress 站點或使用 Nginx 作為 Apache 的反向代理,您可以調整服務器設置以幫助防止 504 Gateway Timeout 錯誤。

Nginx + FastCGI (PHP-FPM) 上的 504 網關超時錯誤

首先,您必須編輯 PHP-FPM 池配置文件。 您可以在 Nginx 服務器的/etc/php7.4/fpm/pool.d/www.conf位置找到它(具體路徑可能因 PHP 版本而異)。 或者,您可以在終端中運行以下命令來編輯 PHP-FPM 池配置文件:

 sudo nano /etc/php/7.2/fpm/pool.d/www.conf

接下來,設置以下指令:

 request_terminate_timeout = 300

在此之後,您必須編輯您的php.ini文件。 您可以在/etc/php.ini中找到它。 打開文件並將max_execution_time指令的值添加/更改為 300 秒。

 max_execution_time = 300

最後,將以下代碼添加到nginx.conf文件的 location 塊中:

 location ~ .php$ { ... fastcgi_read_timeout 300; }

重新加載 Nginx 和 PHP-FPM 以使更改生效。

 sudo service nginx reload sudo service php7.4-fpm reload

重新加載 PHP-FPM 的確切代碼將根據服務器上安裝的 PHP 版本而有所不同。 測試您的網站以查看它是否已解決問題。

Nginx 代理上的 504 網關超時錯誤

如果您使用 Nginx 作為 Apache 的反向代理服務器,那麼您可以通過將以下指令添加到您的nginx.conf文件來使其對服務器超時更加寬容:

 proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600;

進行更改後不要忘記重新加載 Nginx。

sudo service nginx reload

其他 HTTP 錯誤,如 504 網關超時

如文章前面所述,許多其他 HTTP 5xx 錯誤就像 504 Gateway Timeout 錯誤一樣。 這是因為它們都發生在服務器端。 這些錯誤包括:

  • 500內部服務器錯誤
  • 501 未實現錯誤
  • 502 錯誤網關錯誤
  • 503 服務不可用錯誤

由於客戶端問題導致的其他 HTTP 錯誤,例如 404 Not Found 錯誤,也類似於 504 錯誤。 您可以參考 Kinsta 的詳細指南和 HTTP 狀態代碼列表以獲取更多信息。

當您不知道導致 504 網關超時錯誤的原因時,您如何及時修復它以防止來之不易的訪問者跳到競爭對手的網站? 所有細節都在這篇文章中。 點擊推

概括

由於多種原因,您的 WordPress 站點可能會受到 504 網關超時錯誤的影響。 在本文中,您了解瞭如何對所有問題進行故障排除。 通常,這些錯誤是由服務器端問題引起的,在這種情況下,您可以聯繫您的主機并快速解決問題。

但是,您還必須了解,此錯誤可能是由於第三方插件、主題、服務、低效的數據庫查詢或其中兩個或多個組合造成的。 如果您要最大限度地利用服務器資源(例如 PHP 工作者),建議優化您的站點以提高性能。

如果您仍然發現您的網站超時,那麼很可能您需要升級您的託管計劃或 PHP 工作人員的數量。 我建議您僅在用盡本文中描述的所有其他解決方案後才考慮此選項。

從簡單的靜態網站到復雜的電子商務和會員網站,Kinsta 的可擴展託管計劃旨在適應所有類型的網站。 要了解有關我們可擴展雲託管的更多信息,請查看本文!

我們錯過了什麼嗎? 如果您仍然發現難以修復 WordPress 網站上的 504 Gateway Timeout 錯誤,請在下方發表評論。