最近我在服务器VPS上面安装了宝塔面板,并且在PHP扩展里面安装了Redis,并设置了密码,第一个网站yuming1用的是wordpress,网站后台插件也安装了Redis,并且已经连接成功。
但是当我往宝塔面板添加第二个wordpress网站的时候,网站后台同样安装了redis插件,但是两个网站却同时都打不开了,打不开以后,我直接把redis卸载,并且删除了object-cache.php文件,这时候虽然可以打开网站。但是第一个网站打开以后,点击网站里面的链接却自动跳转到了第二个网站。
后来经过我一番研究,发现问题是两个 WordPress 网站 共享 Redis 缓存空间 导致的「缓存污染」或「缓存混淆」,这是 Redis 缓存常见的误用问题,尤其在多站点环境下很容易踩坑。
两个网站共用 Redis 实例,但没有设置 不同的缓存前缀(key prefix)。所以第二个网站连接 Redis 后,和第一个网站用的是同一个 key 命名空间,缓存内容互相覆盖,导致:页面跳转到错误的网站;数据错乱;两个网站同时打不开(缓存崩溃或逻辑冲突)。
我们只需要为每个站点配置不同的 Redis 数据库编号,Redis 默认有 16 个数据库(编号 1~16),可供16个网站同时使用Redis。
如何让多个网站共用Redis?解决方法:
1、登录宝塔面板,左侧点击【软件商店】,PHP里面安装扩展,选择“redis缓存器,基于内存亦可持久化的Key-Value数据库”。
2、安装完成以后,刷新回到软件列表,软件安装列表里面会多个已安装的软件【Redis】,点击Redis后面的设置,性能调整,在requirepass后面设置任意密码,比如我设置XIA888。点击保存。然后点击服务,重启。
3、修改两个网站的 wp-config.php,在宝塔面板里面点击:文件,进入yuming1里面,找到wp-config.php,双击打开编辑。在 /* That's all, stop editing! Happy publishing. */ 这一行上面添加以下内容:
// 👉 Redis 配置(第一个网站 yuming1.com)👇 define('WP_REDIS_HOST', '127.0.0.1'); define('WP_REDIS_PORT', 6379); define('WP_REDIS_PASSWORD', 'XIA888'); define('WP_REDIS_DATABASE', 1); // 第一个网站使用 Redis 数据库 1 define('WP_REDIS_PREFIX', 'yu1_'); // 设置缓存前缀 // 👆 Redis 配置结束
同样第二个网站修改方法,进入宝塔面板文件,yuming2里面,找到wp-config.php,双击打开编辑。在 /* That's all, stop editing! Happy publishing. */ 这一行上面添加以下内容:
// 👉 Redis 配置(第二个网站 yuming2.com)👇 define('WP_REDIS_HOST', '127.0.0.1'); define('WP_REDIS_PORT', 6379); define('WP_REDIS_PASSWORD', 'XIA888'); define('WP_REDIS_DATABASE', 2); // 第二个网站使用 Redis 数据库 2 define('WP_REDIS_PREFIX', 'yu2_'); // 设置缓存前缀 // 👆 Redis 配置结束
最终结果如下图所示:红色方块是我们复制添加进入的代码,代码要粘贴到/* That's all, stop editing! Happy publishing. */ 这一行上面。
两个站点都设置好 wp-config.php,接下来我们去已安装软件里面重启一下PHP和Redis。
然后去两个wordpress网站后台安装插件:Redis Object Cache。
WordPress 后台 → 插件 → 安装插件 → 搜索“Redis Object Cache” → 安装 → 启用
启用缓存功能。
最后我们去wordpress插件里面,点击Redis Object Cache下面的设置,如下图:
此时秘钥前缀已经显示我们设置的yu1_,数据库显示的也是我们设置的1,另一个网站显示的秘钥前缀则是yu2_,数据库显示为2。此时我们的两个网站表示已经设置成功,可以正常访问。
最后重要提醒:
每个网站用不同的 WP_REDIS_DATABASE 编号(一个 1,一个 2,之后可以3,4,5...)
每个网站用不同的 WP_REDIS_PREFIX 前缀,yu1_,yu2_
同一个 Redis 实例可以开16个数据库(编号 1~16)
一定不要两个网站共用默认的编号和前缀,否则就会冲突
Redis 的密码设置后可以防止外部访问,但多网站共享 Redis 实例时,一定要区分数据库编号或前缀;
避免修改 object-cache.php 文件,插件会自动生成;
推荐使用 Redis Object Cache 插件,而不是那些不知名的 Redis 插件;
最后,如果你的服务器上面网站超过了16个,可以和其他网站共用数据库,只修改不同的前缀就行了。一般如果是10个网站以内,建立单独的数据库比较逻辑清晰方便管理。
评论