Uncaught RedisException: session_write_close()
Итак, у меня есть сайт под управлением Joomla, и я попытался установить session handler
в redis
из панели администратора CMS. Я получаю следующую ошибку на домашней странице и на каждой другой странице посещаемого веб-сайта.
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
(из моей панели управления сервером) все работает отлично.
Кстати, я использую PHP-Redis
в качестве клиентской библиотеки на Ubuntu и ISPConfig в качестве моей панели управления для настройки LAMP.
1 ответ
Хорошо, так что после того, как я много потянул за волосы и, слава Богу, у меня есть эти удивительные навыки Гуг-фу, вот решение.
Если вы используете ISPConfig 3 и столкнулись с той же проблемой, просто сделайте, как я говорю ниже, не спрашивайте почему, нет времени объяснять.
На line 39
файла /usr/local/ispconfig/server/conf/php_fpm_pool.conf.master
Вы найдете следующие теги шаблона.
<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
, И... ааааа, великолепный Redis с совершенно потрясающим php-fpm.
Хорошо, вы можете спросить почему, шучу раньше:D
Согласно этой теме, Joomla(как и многие другие CMS) пытается изменить session.save_path
в redis
во время выполнения в соответствии с настройками, сделанными в панели администратора CMS, но "fpm-pool-template", поставляемый с ISPConfig 3, пытался сделать это значение редактируемым из панели управления сервером, в процессе чего это делало невозможным за php
изменить / перезаписать это значение во время выполнения.
Как описано здесь.
... Любой тип директивы, установленный с помощью php_admin_value, не может быть переопределен с помощью.htaccess или ini_set().
Теперь, это безопасно?... удалить эти теги с помощью директив.
Абсолютно безопасно удалить вышеупомянутые строки, и они были написаны для пользователей, чтобы дополнительно изменить их потребности, как обсуждалось здесь. Кроме того, используемая функция была слишком строгой (ИМХО), и такого же эффекта можно было бы достичь, используя менее авторитарный php_value
,