Docker PHP:FPM 7.2无法设置session.save_handler,始终默认使用files求助
我之前也踩过一模一样的坑,咱们一步步排查解决:
1. 先检查php-fpm配置的写法是否正确
你可能犯了一个常见的小错误:在php-fpm的.conf文件里,不能直接写session.save_handler = redis,得用php_admin_value的格式,因为php-fpm的配置项语法和php.ini不一样。正确的写法应该是:
php_admin_value[session.save_handler] = redis php_admin_value[session.save_path] = "tcp://rediserver:6375"
另外注意:Redis的session.save_path用的是tcp协议,不是https——Redis本身不支持HTTP协议,这个格式错误也会导致配置不生效!
2. 确认Redis扩展真的被PHP-FPM加载了
光安装扩展还不够,得确保PHP-FPM确实加载了它:
- 执行命令:
php-fpm -m | grep redis,如果输出redis说明加载成功; - 或者创建一个简单的php文件(比如
info.php),内容如下:
访问这个文件后,搜索"redis"关键词,确认扩展存在。如果没加载,去php.ini(或者php-fpm专用的ini文件)里添加<?php phpinfo(); ?>extension=redis.so,然后重启php-fpm。
3. 验证php-fpm是否读取了你的配置文件
打开php-fpm的主配置文件(比如/usr/local/etc/php-fpm.conf),检查里面的include指令,确保它包含了你添加的conf文件目录,比如:
include=/usr/local/etc/php-fpm.d/*.conf
然后执行php-fpm -t测试配置语法,输出test is successful才说明配置没有语法错误。
4. 查看当前生效的Session配置
通过phpinfo页面,找到"Session"模块,查看session.save_handler和session.save_path的实际值。如果还是files,说明你的配置被其他文件覆盖了。
你也可以在phpinfo里查看Loaded Configuration File和Additional .ini files parsed,确认所有加载的配置文件顺序——后面加载的文件会覆盖前面的设置,要是有其他conf文件在你的session.conf之后加载,并且设置了session.save_handler=files,那就会覆盖你的配置。
5. 用正确的方式重启php-fpm
别用reload,有时候reload不会重新加载配置文件,直接用重启命令:
- Systemd系统:
systemctl restart php-fpm - SysVinit系统:
service php-fpm restart - 源码编译的php-fpm:
kill -USR2 $(cat /usr/local/var/run/php-fpm.pid)
重启后查看php-fpm的日志(比如/var/log/php-fpm.log),有没有关于配置或者Redis扩展的报错信息。
内容的提问来源于stack exchange,提问作者Carlos Santini

