如何解決使用Cloudflare導致WP-Cron不工作問題?

錯誤型別:
WP內部錯誤
錯誤名稱:
WP-Cron不工作问题
英文名稱:
This may indeicate the CRON system is not running properly.
錯誤描述:
由于未正确地配置Cloudflare导致WordPress的定时任务失效。

WordPress定時任務不工作

WordPress需要一些基本要求,例如MySQL和正確的PHP版本才能正常執行。此外,您還需要額外的設定才能使已安裝的外掛和主題正常工作。

WP-Cron是WordPress網站在儀表盤中獲取更新和報告所需的此類要求之一。另一方面,Cloudflare是許多託管公司內建的流行的免費CDN服務。

不幸的是,如果您沒有正確配置Cloudflare,它可能會停止WP-Cron作業的執行並導致不希望出現的問題。如果您遇到困難,這裡是您可以嘗試通過Cloudflare CDN設定以修復WP-Cron無法正常工作的問題。

更多關於WP-Cron

Cron是Unix中用於排程作業以在後臺完成任務的命令。在WordPress世界中,WP-Cron類似於Unix cron作業,用於以週期性間隔排程任務。與您可以在特定時間安排的系統cron作業不同,WP-Cron在每次頁面載入時執行並觸發預定任務。以下是一些示例,讓您瞭解WP-Cron的作用:

  • 更新WordPress儀表盤小工具,例如實時銷售小工具。
  • 檢查處於預定狀態的文章並按計劃釋出。
  • 外掛可以在後臺執行資料庫更新、快取清除等任務。

您還可以在此處從官方WordPress頁面閱讀有關WP-Cron的更多詳細資訊。

查詢WP Cron問題

當WP-Cron執行出現問題時,會直接影響定時任務的執行。您可以在儀表盤和伺服器的錯誤日誌中看到一些失敗通知。下面是一個來自WP Rocket外掛的例子,它使用WP-Cron來執行預定的快取清除。如果不清除快取,則會因大量過時的快取內容而減慢您的網站速度。

WP Rocket Cron作業問題

WP Rocket Cron作業問題

您還可以使用WP Crontrol之類的外掛來監控和查詢站點中與cron相關的問題。一旦您發現WP-Cron存在問題,您應該檢查您最近在該網站上所做的活動。如果您啟用了Cloudflare或更改了CDN中的任何設定,那麼這是開始故障排除的第一個地方。

在Cloudflare中檢查WP Cron問題

Cloudflare的安全設定允許您阻止惡意機器人。不幸的是,這也可以阻止像WP-Cron這樣的自動化活動作為誤報。好的部分是您可以根據日誌中的IP地址和查詢字串輕鬆找到它。由於WP-Cron將從您的託管伺服器的IP地址執行,您可以根據您的伺服器的IP檢查被阻止的條目以查詢更多詳細資訊。

  • 如果您不知道伺服器的IP地址,您可以從主機面板中找到它。或者,您可以轉到Cloudflare帳戶的DNS部分並找到帶有@的A記錄,該記錄將指向您伺服器的IP地址。
  • 之後,轉到“Security>Overview”部分,然後單擊“Add filter”按鈕。
  • 根據與伺服器IP相同的IP地址過濾日誌。
  • 在這裡,您應該找到顯示“ /wp-cron.php ”的“Paths”部分,如下圖所示。
  • 您還可以找到其他詳細資訊,例如阻止的原因,在我們的例子中是“manage defined bots”。

查詢伺服器IP的安全詳細資訊

查詢伺服器IP的安全詳細資訊

如果您想了解更多詳細資訊,請在頁面上向下滾動並檢視活動日誌部分。在這裡,您可以找到為了解WP-Cron因託管規則設定和託管挑戰而被阻止而採取的服務和操作。這取決於您的安全設定,您可能在其中選擇了一些帶有託管質詢的選項。

檢視伺服器IP的活動日誌

檢視伺服器IP的活動日誌

單擊“Edit columns”按鈕以新增可以顯示更多詳細資訊的其他列。由於IP地址已經存在,請選擇“Path”和“Query string”覈取方塊。

選擇路徑和查詢字串

選擇路徑和查詢字串

這將新增其他列並向您顯示路徑和查詢字串。正如您在下面的螢幕截圖中所見,路徑將顯示為/wp-cron.php,查詢字串將顯示類似?doing_wp_cron的內容。

查詢路徑和查詢字串詳細資訊

查詢路徑和查詢字串詳細資訊

相關文章:

使用Cloudflare修復WP-Cron問題

現在很明顯,Cloudflare安全設定會阻止WP-Cron在您自己的託管伺服器上執行。嘗試以下選項來解決問題。您可能需要檢查您的WordPress儀表盤,使用外掛或檢查伺服器的日誌,如上所述,以確認WP-Cron工作正常。

1.禁用絕對自動化的機器人

免費Cloudflare帳戶有一個簡單的“機器人戰鬥模式”來阻止自動機器人。您可以轉到“Security> Bots”部分並關閉此選項並檢查WP-Cron是否在您的站點上執行。

Bots Fight Mode

在免費Cloudflare帳戶中禁用Bots Fight Mode

如果您使用高階Cloudflare計劃,請在“Security > Bots”部分單擊“Configure Super Bot Fight Mode”連結。

在Cloudflare中配置超級機器人戰鬥模式

在Cloudflare中配置超級機器人戰鬥模式

在這裡,您可以看到“Definitely automated”機器人被“Managed Challenge”選項阻止。這是您在活動日誌中看到的“Definitely automated”,如上所述。由於WP-Cron肯定是在後臺自動化的,Cloudflare會阻塞並造成麻煩。單擊下拉選單並選擇“Allow”,Cloudflare將自動儲存您的設定。

允許絕對自動化的機器人

允許絕對自動化的機器人

在大多數情況下,這將解決Cloudflare的WP-Cron不工作問題。

2.禁用WAF下的託管規則

如果允許機器人不能解決問題,那麼下一個選項是禁用Cloudflare自動設定的託管規則。根據您使用的平臺,Cloudflare將自動啟用某些Web應用程式防火牆 (WAF) 規則來保護您的站點。您可以轉到“Security> WAF”部分並在“Managed rules”部分下找到為您的站點啟用的規則。只需禁用“Managed rules”選項即可將其關閉。

在Cloudflare中禁用託管WAF規則

在Cloudflare中禁用託管WAF規則

或者,進入頁面並僅禁用Cloudflare WordPress規則集。

禁用Cloudflare WordPress規則集

禁用Cloudflare WordPress規則集

現在,檢查您的WP-Cron是否在沒有來自Cloudflare的WAF規則的情況下執行。

3. 在IP訪問規則中將您的伺服器列入白名單

禁用WAF規則集是有風險的,這可能會破壞Cloudflare安全的目的。雖然您可以使用Wordfence和AIOWPS等外掛來新增防火牆,但最好的選擇是在Cloudflare WAF設定中允許您網站的伺服器IP。當您位於Cloudflare帳戶的WAF部分時,請轉到“Tools”選項卡。輸入您的伺服器IP,選擇允許和此網站選項,然後單擊“Add”按鈕。這將新增一個異常並避免阻止您自己的伺服器的活動,如WP-Cron作業。

為繞過Cloudflare防火牆新增IP例外

為繞過Cloudflare防火牆新增IP例外

小結

Cloudflare是流行的CDN和安全服務,但是,它無法識別WordPress站點所需的另一個流行的WP-Cron作業。這是可以理解的,因為外掛可以出於不同的原因執行WP-Cron並導致您的站點出現安全問題。

不幸的是,即使在伺服器上手動安排cron作業也無法解決問題,因為外掛開發人員可能會使用預設的WP-Cron作業。解決方案是禁用機器人保護或排除伺服器的IP地址,這將允許執行WP-Cron作業。

評論留言