当前位置: 首页 > 小窝近况 > 正文

修复服务器重启后WordPress白屏问题

问题描述

我的WordPress站点配置了每天凌晨自动重启服务器。但最近发现一个奇怪的问题:每次重启后,站点都会白屏,前端没有任何报错信息,必须手动清除Redis数据库才能恢复正常访问。

这个问题持续了有三天时间,每天凌晨自动重启后都要早上才发现需要进服务器手动处理一次,非常影响使用体验。

排查过程

首先查看Nginx错误日志,发现了关键线索:

objectcache.notice: Cache metadata not found, skipping integrity protection flush because `strict` mode is disabled

这条日志来自Object Cache Pro插件,说明Redis中的缓存元数据丢失了。通过阅读插件源码,我理解了启动流程:

  1. WordPress加载时,Object Cache Pro从Redis读取元数据(metadata)
  2. 元数据用于缓存完整性校验
  3. 如果元数据丢失,且strict=false(默认配置),插件只记录日志不做处理,导致白屏
  4. 如果strict=true,插件会自动清空缓存并重建

那为什么元数据会丢失?检查宝塔面板的Redis配置后发现:

  • AOF持久化:关闭
  • RDB持久化:0秒/0条(永远不会触发)

根因找到了:Redis没有开启任何持久化机制,服务器重启后内存中的数据全部丢失。

为什么之前没问题,现在才有?

Object Cache Pro在较新版本中引入了metadata完整性检查机制。旧版本在Redis数据丢失后会直接重建缓存,不会有问题。新版本检测到metadata丢失后会触发完整性保护,如果配置不当(strict=false)就会导致白屏。

解决方案

1. 开启Redis AOF持久化(根本解决)

  1. 登录宝塔面板 → 软件商店 → Redis → 设置
  2. 找到 AOF持久化,改为 开启
  3. appendfsync 保持 everysec(每秒同步,性能和安全的平衡)
  4. 点击保存,重启Redis服务

AOF持久化会记录每个写操作到日志文件,Redis重启时自动重放恢复数据,最多只丢失1秒的数据。

2. 调整Object Cache Pro配置(辅助容错)

在wp-config.php中调整Redis配置:

define('WP_REDIS_CONFIG', [
    'token' => 'your_token_here',
    'host' => '127.0.0.1',
    'port' => 6379,
    'database' => 0,
    'maxttl' => 21600,
    'timeout' => 1.0,
    'read_timeout' => 1.0,
    'retries' => 5,              // 重试次数增加到5
    'retry_interval' => 500,     // 重试间隔增加到500ms
    'prefetch' => false,
    'split_alloptions' => true,
    'strict' => true,            // 改为true:元数据丢失时自动清空缓存
    'debug' => false,
    'analytics' => false,
    'save_commands' => false,
]);

关键配置说明:

  • strict => true:元数据丢失时自动清空缓存并重建,而不是留下不一致的状态
  • retries => 5和retry_interval => 500:增加连接重试次数和间隔,防止Redis启动慢导致连接失败

修复效果

开启AOF持久化后,服务器重启时Redis会自动恢复数据,Object Cache Pro能找到元数据,站点正常启动,白屏问题彻底解决。

总结

对于使用Redis缓存的WordPress站点,建议:

  • 开启Redis AOF持久化,确保重启后数据不丢失
  • 配置Object Cache Pro的strict=true模式,增加容错能力
  • 定期检查Redis持久化文件是否正常生成
THE END

相关推荐

修复服务器重启后WordPress白屏问题:等您坐沙发呢!

发表评论