WP Rocket缓存文件自动消失或未实际生成缓存文件的问题解决

有网友向站长帮反馈,WP Rocket缓存文件自动消失,怀疑是主题或插件存在兼容性。当时未留意这个问题,以为是缓存有效期设置有问题。但最近碰到一客户网站,也出现了此种怪异现象,不禁探究了一下,解决了该问题,现分享出来以供大家借鉴。

网友关于WP Rocket的问题反馈
网友关于WP Rocket的问题反馈

问题现象:在WordPress后台,开启了WP Rocket预缓存,并手动点击开始预缓存后,虽提示开始预缓存了,并刷新页面发现已预缓存的数字在增加,但在wp-content/cache/wp-rocket/www.abc.com目录中却没有相应的缓存文件。

这倒是难倒文盲了……

索性抽出时间,仔细检查PHP的执行情况,并阅读WP Rocket的文档资料,发现了几个有价值的线索:

1、WP Rocket在什么情况下会自动清除缓存:

缓存寿命
缓存寿命到期时清除的页面将被预加载。

更新的内容已预加载
当发布或更新帖子/页面/自定义帖子类型时,WP Rocket 会自动清除该特定内容和与之相关的任何其他内容(即主页、类别、标签、分页等)的缓存。它还会清除在“始终清除 URL”选项中输入的任何 URL 的缓存。

变更了主题选项

在用户变更了仪表板>外观>自定义选项,WP Rocket 会自动清除全站缓存。

手动清除缓存
当手动清除缓存(从管理工具栏或 WP Rocket 仪表板)时,只会自动预加载主页。对于完整的预加载,必须手动启动(从管理工具栏或 WP Rocket 仪表板)。

2、以上预加载靠WP Cron或系统计划任务驱动

WP Rocket预加载依赖于  WP Cron(WordPress的计划任务),而WP Cron又依赖于 WordPress 中的 PHP 页面加载,也就是说只有在访问了WordPress的PHP页面(非缓存页面)才会驱动WP Cron执行。

如果一定时间内WordPress的PHP页面没有任何执行,那么WP Cron也会在这个时间里无效。

PS:如果WP Cron本身有故障也会造成预加载问题。

关于这一点,最佳解决方案就是关闭WordPress的计划任务,用系统的计划任务取代它。具体方法如下:

①在WordPress的wp-config.php配置文件中添加以下代码:

//禁用WP_CRON计划任务
define('DISABLE_WP_CRON', true);

②在crontab中添加以下指令,并设置每10分钟执行一次(注意修改域名)。

wget -q -O - https://www.abc.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

以宝塔面板为例:

宝塔面板中开启WordPress计划任务
宝塔面板中开启WordPress计划任务

如果网站频繁更新的,可以将执行周期改为5分钟。

这样一来,就解决了WP计划任务的问题了。但如果是全站开启了CDN或360网站卫士之类的服务的话,以上指令可能会出现问题,因为域名已解析至CDN或安全防护IP上,PHP程序可能会没有正确执行甚至因频繁执行而被拦截。

所以加上一个保险,修改系统的etc/hosts文件,添加以下行(注意修改域名),将在服务器上将域名解析到本机。

127.0.0.1 www.abc.com

或者将127.0.0.1替换成服务器的固定IP。

提示:快速检查 WP-Cron 是否在WordPress 上正常运行的插件:WP-Cron Status Checker

至此,我所碰到的WP Rocket预缓存未生成文件,且缓存被自动清除后没有自动预加载的问题已解决。我相信大部分的此类问题,应该都是WP-Cron问题引起的。不知道上面那位提问的网友是否看到了此文,是否也能解决你的问题,如果还有类似问题,欢迎留言讨论。

如果实在不行,提供一个WordPress附加插件,安装并启用后,WP Rocket可以正常缓存,但不再自动清除缓存,除非手工清除。

下载链接: https://pan.baidu.com/s/1gcfgVuUvMvEjiPU6eiJZ4w?pwd=krzk

WP Rocket非常好用且功能强大是共识的,开发者为了让用户使用起来更便捷,所以增加了很多自动化的功能,但这些自动化的功能都基于WP-Cron计划执行,所以确保WP-Cron执行正常才能使WP Rocket正常,很多类似插件也是如此。

站长帮社区

建站技术交流社区,欢迎提问与交流,还有大量WordPress主题与插件。

《WP Rocket缓存文件自动消失或未实际生成缓存文件的问题解决》有 2 条评论

发表评论