问题背景
一个基于 WordPress 二次开发的网站,部署在香港云服务器上。服务器环境为 CentOS 6.8 64位,使用 LNMP 1.5 一键安装包。
网站最初启用了全站 HTTPS (SSL 加密)。后来发现 HTTPS 对 SEO 有一定影响,并且部分地区的用户因网络限制无法访问 HTTPS 网站。
因此,计划移除 HTTPS 并迁移服务器。在过渡期间,同时保留了 HTTP 和 HTTPS 访问。
同时,将对象缓存从 Memcached 更换为 Redis。
问题现象
服务器迁移并更换缓存为 Redis 后,发现通过 HTTP 协议无法登录 WordPress 后台。
即使通过 phpMyAdmin 直接修改 MySQL 数据库中管理员的密码,仍然无法登录。系统总是提示“密码不匹配”或“未启用 Cookie”。
问题分析与解决
经过排查,确定问题根源在于 Redis 对象缓存。Redis 中可能缓存了与用户会话、登录状态或非 HTTPS 环境相关的旧数据,导致登录验证失败。
解决方案: 登录 Redis 并清除所有缓存数据。
操作步骤
- 通过 SSH 登录服务器。
- 进入 Redis 的安装目录(路径可能因安装方式而异):
cd /usr/local/redis - 使用 Redis 命令行客户端登录:
./bin/redis-cli - 执行命令,清空所有数据库的缓存(注意:此操作会删除 Redis 中所有数据):
flushall
执行完毕后,退出 Redis 客户端,再次尝试登录 WordPress 后台,即可恢复正常。
补充说明与建议
1. 根本原因: 在从 HTTPS 迁移到 HTTP 并更换缓存系统的复杂操作中,Redis 可能缓存了包含旧协议 (HTTPS) 信息的用户会话、站点 URL 或认证 Cookie,导致在新的 HTTP 环境下验证失败。
2. 更安全的操作: 如果只想清除 WordPress 相关的缓存,而不是全部数据,建议使用 WordPress 的 Redis 缓存插件(如 Redis Object Cache)提供的管理功能进行清除,或在 Redis 命令行中指定只清除 WordPress 使用的数据库(例如:select 0 后执行 flushdb)。
3. 预防措施: 在进行重大环境变更(如协议切换、缓存系统更换)前,应先主动清除旧的缓存数据,以避免此类问题。
4. 环境更新: 原文中提到的 CentOS 6.8 和 LNMP 1.5 版本已较旧。建议考虑将系统升级到受支持的版本(如 CentOS 7/8 或 Rocky Linux/AlmaLinux),并使用更新的软件栈,以获得更好的安全性和兼容性。