Lighttpd 1.4 auf Unix-Systemen
Dieser Abschnitt enthält Notizen und Hinweise zur Installtion von Lighttpd 1.4 für PHP auf Unix-Systemen.
Vor der Installation von Lighttpd wird empfohlen, die Installationsanleitung der » Lighttpd-Dokumentation zu lesen.
FastCGI ist die bevorzugte SAPI, um PHP mit Lighttpd zu verbinden. FastCGI wird in php-cgi automagisch aktiviert.
Lighttpd einen php-Prozess starten lassen
Um Lighttpd so zu konfigurieren, dass es sich mit PHP verbindet und FastCGI-Prozesse startet, muss die Datei lighttpd.conf editiert werden. Auf einem lokalen System werden vorzugsweise Sockets für die Verbindung zu FastCGI-Prozessen verwendet.
Beispiel #1 Ein Teil der lighttpd.conf
server.modules += ( "mod_fastcgi" ) fastcgi.server = ( ".php" => (( "socket" => "/tmp/php.socket", "bin-path" => "/usr/local/bin/php-cgi", "bin-environment" => ( "PHP_FCGI_CHILDREN" => "16", "PHP_FCGI_MAX_REQUESTS" => "10000" ), "min-procs" => 1, "max-procs" => 1, "idle-timeout" => 20 )) )
Die Direktive bin-path erlaubt es Lighttpd,
FastCGI-Prozesse dynamisch zu erzeugen. PHP erzeugt die Kindprozesse
entsprechend der Umgebungsvariable PHP_FCGI_CHILDREN. Die
Direktive bin-environment
definiert die Umgebung für die
erzeugten Prozesse. PHP beendet einen Kindprozess, nachdem die in
PHP_FCGI_MAX_REQUESTS festgelegte Anzahl von Anfragen
erreicht ist. Die Direktiven min-procs
und
max-procs
sollten bei PHP generell vermieden werden. PHP
verwaltet seine eigenen Kindprozesse und OpCode-Caches wie APC nutzen nur
die von PHP verwalteten Kindprozesse. Wenn min-procs
auf
einen Wert größer 1
gesetzt ist, wird die Anzahl der
PHP-Responder mit PHP_FCGI_CHILDREN multipliziert
(2 min-procs * 16 Kindprozesse ergibt 32 Responder).
Prozesse mit spawn-fcgi erzeugen
Lighttpd stellt das Programm spawn-fcgi zur Verfügung, um das Erzeugen von FastCGI-Prozessen zu vereinfachen.
php-cgi starten
Es ist möglich, Prozesse ohne spawn-fcgi zu starten, jedoch ist dafür etwas Arbeit nötig. Die Umgebungsvariable PHP_FCGI_CHILDREN definiert, wieviele Kindprozesse PHP erzeugt, um eingehende Anfragen zu bearbeiten. PHP_FCGI_MAX_REQUESTS definiert, wie lange (in Anfragen) jeder Kindprozess existiert. Hier ist ein einfaches Bash-Skript, um das Erzeugen von PHP-Respondern zu vereinfachen.
Beispiel #2 FastCGI-Responder erzeugen
#!/bin/sh # Ort des php-cgi-Programms PHP=/usr/local/bin/php-cgi # Ort der PID-Datei PHP_PID=/tmp/php.pid # Bindung an eine Adresse #FCGI_BIND_ADDRESS=10.0.1.1:10000 # Bindung an einen Domain-Socket FCGI_BIND_ADDRESS=/tmp/php.sock PHP_FCGI_CHILDREN=16 PHP_FCGI_MAX_REQUESTS=10000 env -i PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN \ PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS \ $PHP -b $FCGI_BIND_ADDRESS & echo $! > "$PHP_PID"
Mit entfernten FCGI-Instanzen verbinden
Um Anwendungen besser zu skalieren, können FastCGI-Instanzen auf mehreren entfernten Rechnern gestartet werden.
Beispiel #3 Mit entfernten FCGI-Instanzen verbinden
fastcgi.server = ( ".php" => (( "host" => "10.0.0.2", "port" => 1030 ), ( "host" => "10.0.0.3", "port" => 1030 )) )