如何解决使用Cloudflare导致WP-Cron不工作问题?

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作业。

评论留言