直接用 redis 替换 php 文件式 session,nginx 仅反向代理不参与 session 管理;php-fpm 统一读写同一 redis 实例,需配置 redis.so 扩展、save_handler、save_path(含密码与超时)、gc_maxlifetime,并禁用 ip_hash 实现无状态负载均衡。

直接用 Redis 替换 PHP 默认的文件式 Session 存储,Nginx 本身不参与 Session 管理,只负责把请求转发给 PHP-FPM;真正的共享逻辑在 PHP 层统一读写 Redis,所有后端服务器指向同一个 Redis 实例即可。
Redis 服务准备
安装并启动 Redis(建议 7.x+ 版本,已修复 CVE-2025-62507 等高危漏洞),配置基础安全项:
- 设置密码:在 redis.conf 中取消
requirepass注释,填入强密码 - 绑定内网地址:修改
bind行,仅监听后端服务器可访问的 IP(如192.168.1.100),禁用0.0.0.0 - 开启持久化(可选):根据业务容忍度选择 RDB 或 AOF,避免意外重启丢失会话
- 确认防火墙放行 6379 端口,且所有 PHP-FPM 服务器能 telnet 通该地址和端口
PHP-FPM 配置调整
每台运行 PHP-FPM 的服务器都需要修改 php.ini,让 session 数据落地到 Redis:
- 启用 Redis 扩展:
extension=redis.so(Linux)或extension=php_redis.dll(Windows) - 设置存储方式:
session.save_handler = redis - 指定连接参数:
session.save_path = "tcp://192.168.1.100:6379?auth=your_strong_password&timeout=2.5" - 同步过期时间:
session.gc_maxlifetime = 1440(单位秒),确保与 Redis 的 TTL 一致(例如SETEX session:xxx 1440 ...)
改完后重启 PHP-FPM 服务,并用 php -i | grep session 验证配置是否生效。
Nginx 负载均衡配置
Nginx 这边无需特殊 Session 处理,保持标准反向代理即可。重点是避免用 ip_hash 锁死流量——它虽能临时解决登录掉线,但违背负载均衡初衷,且在 NAT 环境下易失效:
- upstream 块中去掉
ip_hash,用默认轮询或least_conn - 确保
proxy_set_header正确透传 Host 和真实 IP(如X-Real-IP),便于后端日志和风控 - 若需健康检查,可用
health_check指令配合 HTTP 探针,不依赖 Session 状态
验证与注意事项
部署后快速验证是否真正共享:
- 用 curl 或浏览器反复刷新,观察响应头中的
Set-Cookie的PHPSESSID是否不变 - 登录后,在 Redis CLI 中执行
keys "PHPREDIS_SESSION:*",确认有对应 key 生成 - 手动
get该 key,内容应为序列化的 session 数据(如user_id|s:1:"1";login_time|i:1725493200;) - 停掉其中一台 PHP-FPM,请求仍能正常维持登录态,说明共享生效
注意:PHP 的 session.cookie_httponly 和 session.cookie_secure 应按生产环境要求开启;Redis 密码、连接超时、最大连接数等参数需结合并发量压测调优。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











