未捕获的 RedisException:session_write_close()

Uncaught RedisException: session_write_close()

所以我有一个网站 运行ning joomla,我尝试从 CMS 管理仪表板将 session handler 设置为 redis。我在主页和我访问的网站的所有其他页面上收到以下错误。

Error: Failed to start application: Connection closed
Fatal error: Uncaught RedisException: Connection closed in /var/www/xxxx/libraries/joomla/session/handler/native.php:194 Stack trace: #0 /var/www/xxxx/libraries/joomla/session/handler/native.php(194): session_write_close() #1 [internal function]: JSessionHandlerNative->save() #2 {main} thrown in /var/www/clients/client3/web9/web/libraries/joomla/session/handler/native.php on line 194

我的服务器默认配置 php-fpm现在有趣的是 ,如果我将 php-wrapper/module 更改为 运行 Fast-CGI来自我的服务器控制面板)一切工作完美

顺便说一句,我在 Ubuntu 上使用 PHP-Redis 作为客户端库,并使用 ISPConfig 作为 LAMP 设置的控制面板。

好吧,在费尽周折之后,谢天谢地,我有了这些惊人的 goog-foo 技能,这就是解决方案。

如果你使用的是ISPConfig 3,遇到同样的问题,按照我下面说的去做,不要问为什么,没时间解释

在文件 /usr/local/ispconfig/server/conf/php_fpm_pool.conf.masterline 39 上,您将找到以下模板标签。

<tmpl_if name='custom_session_save_path' op='!=' value='y'>
php_admin_value[session.save_path] = <tmpl_var name='document_root'>/tmp
</tmpl_if>

删掉就好!是的,你没看错,你必须删除那些行,伙计。 从管理面板保存更改后,转到

ISPConfig Admin Panel > Sites > Domain > PHP

并将该选项切换为禁用并让它在服务器上更新,然后将该选项设置回 PHP-FPM。还有....aahhh 非常棒的 redis php-fpm.

好吧,你可以问为什么,开玩笑的earlier:D

根据 this thread 发生的事情是 joomla(像许多其他 CMS)试图将 session.save_path 更改为 redis 在运行时 根据 CMS 管理面板中的设置,但是 ISPConfig 3 附带的 "fpm-pool-template" 试图使该值可从服务器控制面板编辑,在该过程使 php 无法在运行时 change/overwrite 该值。

如所述here

...Any directive type set with php_admin_value can not be overridden by .htaccess or ini_set().

现在,安全吗? ..用指令删除这些标签。

删除上述行是绝对安全的,这些行是为用户编写的,可以根据讨论的需要进一步修改 here。此外,所使用的功能有点过于严格(恕我直言),使用较不专制的 php_value 也可以达到相同的效果。