Wechsel von PHP-CGI zu PHP-FPM

Da ich hier schon längere Zeit nichts mehr geschrieben habe, habe ich beschlossen nun auch kürzere, weniger aufwendige Artikel zu veröffentlichen, um hier mal wieder etwas Leben in die Bude zu bekommen. Jetzt aber zum Thema:

Aus einem mir unbekannten Grund verabschiedeten sich auf meinem Debian Squeeze Server die PHP-CGI Prozesse mit folgender Meldung im Error-Log:

(mod_fastcgi.c.3001) backend is overloaded; we'll disable it for 1 seconds and send the request to another backend instead

Ich habe zwar eine generelle Lösung für dieses Problem gefunden (Link), diese konnte ich bei meiner Serverkonfiguration aber leider nicht anwenden. Da ich mehrere PHP-CGI-Pools mit verschiedenen UIDs/GIDs starte und diese in der Lighttpd-Config über die Sockets zuordne, konnte ich hier den "var.PID" Teil nicht anhängen. Davon abgesehen hatte es vorher viele Monate ohne diese Änderung funktioniert. Also habe ich mich kurzerhand dazu entschlossen zu PHP-FPM zu wechseln.

Leider gibt es das php-fpm Paket (noch?) nicht im Debian-Squeeze Repository deswegen habe ich die Paketquellen von Dotdeb verwendet. Die Umstellung funktionierte wunderbar einfach, denn man kann PHP-CGI und PHP-FPM problemlos parallel laufen lassen und einen Vhost nach dem anderen umstellen. Ein recht gutes Tutorial zur Konfiguration von PHP-FPM gibt es hier. Nachdem FPM konfiguriert und gestartet ist kann man in den Vhost-Konfigurationen von Lighttpd einfach den PHP-CGI Teil durch die neue FPM-Konfiguration ersetzen. Das sieht in etwa so aus:

fastcgi.server = ( ".php" =>
      ( "localhost" =>
        (
          "host" => "127.0.0.1",
          "port" => "9001"
        )
      )
    )

Ein enormer Vorteil von PHP-FPM: Man kann mehrere Pools konfigurieren die mit unterschiedlichen UIDs/GIDs laufen, was die Sicherheit auf dem Server ein gutes Stück erhöht.

Mein Fazit: Die Umstellung von PHP-CGI auf PHP-FPM ist relativ leicht zu bewerkstelligen und den Aufwand in jeden Fall wert!