Linuxspicker

Admins kleiner Zettelkasten für die Lösung von Linuxproblemen

Nach php-redis-Update Login bei Nextcloud nicht mehr möglich - php-SessionHandler mittels Redis


Nach einem Update der php-redis-Pakete unter Debian von Version 5.3.7 auf 6.0.0 Anfang September funktionierte der Login bei Nextcloud plötzlich nicht mehr. Es endete immer in einer Endlosschleife des Login-Screens.

Updates von Nextcloud auf 26.0.1 auf zuerst 26.0.5, dann 26.0.6 und 27.0.2 und 27.1.2 brachten keine Änderung. Ausschalten aller Plugins und ähnliches brachten einen auch nicht weiter. Als unbefriedigender Workaround fand sich nur der Verzicht auf den SessionHandler Redis und die Rückkehr zu den langsameren Dateien. Also statt

session.save_handler = redis
session.save_path = "unix:///run/redis/redis-server.sock?persistent=1&weight=1&database=0"
session.save_handler = files
session.save_path = "/var/lib/php/sessions"

Etwas aufwendiger, aber zumindest für die übrigen php-Anwendungen ohne Geschwindigkeitseinbußen, ist das Aufsetzen eines zweiten php-fpm-Pools ausschließlich für Nextcloud und dort dann explizit das Setzen von

php_value[session.save_handler] = files
php_value[session.save_path] = "/var/lib/php/sessions"

in den Einstellungen für den Pool. Ebenso möglich ist es eine komplett eigene Instanz eventuell mit höherer php Version nur für Nextcloud laufen zu lassen. Wirklich befriedigend war das aber auch nicht.

Eine echte Lösung fand sich durch einen indirekten Hinweis in den Helpforen von Nextcloud.

User chrissi55 gab dort seine Nextcloudkonfiguration ohne explizite Ausweisung der Datenbank an.

 'redis' => 
  array (
    'host' => '/var/run/redis/redis-server.sock',
    'port' => 0,
  ),

dbindex fehlte, was wiederum den default-Wert von 0 unterstellte und dies war die gleiche Datenbank, wie in den Einstellungen in der php.ini. Somit funktioniert Redis als SessionHandler also nur, wenn in der Nextcloudkonfiguration eben diese Datenbank auch für alle anderen Redisoperationen angegeben wird.

Meine bisherige Nextcloudkonfiguration mit Redisnutzung:

  'memcache.local' => '\\OC\\Memcache\\APCu',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'redis' => 
  array (
    'host' => '/run/redis/redis-server.sock',
    'port' => 0,
    'dbindex' => 5,
    'timeout' => 1.5,
  ),

musste also nur auf die Datenbank 0 umgestellt werden, damit es wieder funktioniert und die Datenbank mit der in der php.ini übereinstimmt.

  'memcache.local' => '\\OC\\Memcache\\APCu',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'redis' => 
  array (
    'host' => '/run/redis/redis-server.sock',
    'port' => 0,
    'dbindex' => 0,
    'timeout' => 1.5,
  ),

Und siehe da, es funktionierte. Bis zum nächsten Update 😉…


Stichworte: , , , , ,
Kategorien: ,