报错是这么冒出来的。两台应用服务器理论上已经共用会话,实际用户登录后换个节点就掉线,检查发现会话文件只存在本机磁盘上,没有被共享。
真正麻烦的地方在于,几个原因的现象几乎一样。会话驱动仍然是本地文件。还有一种是两台机器的会话目录路径不一致。
不容易想到的是,改了配置文件但没有重载进程。
动手时先看会话实际存储方式
php -i | grep -i 'session.save_handler'
接着改为共享缓存存储
grep -n session.save_handler /etc/php.ini
然后确认会话键在各机都能读到
redis-cli -h 缓存地址 keys 'PHPREDIS*' | head
末了重载进程并验证登录
systemctl reload php-fpm && curl -I https://域名
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
怎么算真的好了,看的是同一批现象。任意节点登录后切换请求都不掉线,会话键在共享存储里能看到。
容易忽略的是,改完配置文件必须重载进程,只改文件不生效;两台机器的会话前缀不一致,也会导致读到的是空会话。报错文案容易误导,真正的原因往往在相邻那一层的日志里。