有网友向反馈,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
以宝塔面板为例:
如果网站频繁更新的,可以将执行周期改为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正常,很多类似插件也是如此。
原文地址:https://www.zhanzhangb.com/3144.html