Lighttpd 1.4 auf Unix systems

Dieser Abschnitt enthält Notizen und Hinweise zur Installtion von PHP für Lighttpd 1.4 für Unixsysteme.

Bitte benutzen Sie das » Lighttpd trac um die ordnungsgemäße Installation von Lighttpd zu lernen bevor Sie fortfahren.

Fastcgi ist die bevorzugte SAPI um PHP mit Lighttpd zu verbinden. Fastcgi ist automatisch bei php-cgi ab PHP Version 5.3 aktiviert. für ältere Version konfigurieren Sie PHP bitte mit der --enable-fastcgi Option. Um zu verifizieren, dass fastcgi aktiviert ist benutzen Sie bitte php -v. In diesen sollte Ihre Ausgabe PHP 5.2.5 (cgi-fcgi) enthalten. Vor PHP 5.2.3 war fastcgi in der php Binärtdatei aktiviert (es gab noch kein php-cgi).

Lighttpd einen php Prozess starten lassen

Um Lighttpd so zu konfigurieren, dass es sich mit php verbindet und einen fastcgi Prozess startet editieren sie bitte die lighttpd.conf. Sockets sind der bevorzugte Weg um sich auf einem lokalen System mit dem fastcgi Prozess zu verbinden.

Beispiel #1 Partial 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
  ))
)

Der bin-path erlaubt es Lighttpd einen neue fastcgi Prozess automatisch zu starten. PHP wird entsprechende der PHP_FCGI_CHILDREN Umgebungsvariable Kindprozesse starte. Das "bin-environment" Direktiv konfiguriert die Umgebung für gestartete Prozesse. PHP Wir Kindprozesse beenden nachdem die Anzahl von Anfragen laut PHP_FCGI_MAX_REQUESTS erreicht ist. Die Direktiven "min-procs" und "max-procs" sollten generell vermieden wirden bei PHP. PHP verwaltet seine eigenen Kindprozesse. Opcode caches wie APC werden nur unter Kindprozessen geteilt, welche von PHP verwaltet werden. Wenn "min-procs" auf einen Wert größer 1 gesetzt ist, wird die totale Anzahle an "php Respondern" mit PHP_FCGI_CHILDREN multipliziert. (2 min-procs * 16 Kindprozesser ergibt 32 Responder)

Spawning mit spawn-fcgi

Lighttpd bietet ein Programm "spawn-fcgi" an um den Prozess des Erstellens von fastcgi Prozessen zu vereinfachen.

Spawning php-cgi

Es ist möglich Prozesse ohne spawn-fcgi zu starten. Jedoch ist dafür etwas Arbeit nötig. Die Umgebungsvariable PHP_FCGI_CHILDREN Umgebungsvariable definiert wie viele Kindprozesse PHP spawnen wird um eingehende Anfragen zu bearbeiten. PHP_FCGI_MAX_REQUESTS definiert wie lange (in Anfragen) jeder Kindprozess existieren wird. Hier ist ein einfaches bash script um das Spawnen von PHP Respondern zu vereinfachen.

Beispiel #2 Spawning FastCGI Responders

#!/bin/sh

# Location of the php-cgi binary
PHP=/usr/local/bin/php-cgi

# PID File location
PHP_PID=/tmp/php.pid

# Binding to an address
#FCGI_BIND_ADDRESS=10.0.1.1:10000
# Binding to a 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"

Verbindung zu entfernten FCGI Instanzen

Um Anwendungen besser zu skalieren können fastcgi Instanzen auf mehreren entfernten Maschinen gestart werden.

Beispiel #3 Verbindung zu entferten php-fastcgi Instanzen

fastcgi.server = ( ".php" =>
   (( "host" => "10.0.0.2", "port" => 1030 ),
    ( "host" => "10.0.0.3", "port" => 1030 ))
)