06.032013

Die Vorteile von PHP-FPM

Hey,

jeder Sysadmin oder Entwickler, der sich schon mal mit der Einrichtung eines Webservers mit PHP herumgeschlagen hat, wird wissen, dass es gar nicht so einfach ist diesen so zu installieren, dass es hinterher auch noch halbwegs sicher und performant ist.

Am häufigsten wird wohl, im Zusammenspiel mit Lighttpd als Webserver, das PHP per FastCGI angebunden. Das hat gegnüber CGI den Vorteil, dass nicht für jeden eingehenden Request ein neuer PHP Prozess gestartet werden muss. Die PHP Prozesse laufen dauerhaft, somit ist der Interpreter schon geladen und der Request kann direkt durchgereicht werden.
Auch können Verbindungen (bspw. zur Datenbank) persistent gehalten werden und überleben somit die einzelnen Request.

Nun hat man hier aber das Problem, dass die PHP Prozesse immer in der gleichen Umgebung, mit der gleichen User- und GruppenID, wie der Webserver laufen.
Außerdem ist es nicht möglich die PHP Prozesse neuzustarten, ohne ankommende Requests zu verlieren.

Und genau das macht PHP-FPM (FastCGI Process Manager) besser.
In der FPM Config kann man verschiedene Prozess Pools definieren. Für jeden Pool kann man definieren, mit welchen Rechten die Prozesse laufen, man kann die Prozesse sogar in ein Chroot einsperren oder sie mit einer anderen php.ini starten. Jeder Prozesspool lauscht auf einem eigenen Port oder einem Unix Domain Socket, man muss also nur noch im Webserver Konfigurieren wohin die Requests "durchgereicht" werden sollen.

FPM bietet aber noch viel mehr Vorteile. So kann man bspw. die PHP Prozesse neustarten, ohne Requests zu verlieren. Auch koennen PHP Prozesse nach Zeit X automatisch terminiert werden (falls max_execution_time aus der php.ini nicht funktioniert).

Ein weiteres, nettes Feature ist die Konfigurationsvariable "request_slowlog_timeout". Braucht ein Request laenger als dort definiert, wird automatisch ein Backtrace des Requests in ein Logfile geschrieben.

PHP-FPM ist seit PHP 5.3.3 fest in PHP integriert, vorher musste beides manuell vom Admin zusammengefuehrt werden...

Viel Spaß beim Herumprobieren!
Sebastian