Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Netzwerk<br />
PHP-FPM<br />
conf«. Im einfachsten Fall weist in ihr<br />
nur die einsame Zeile:<br />
include=/etc/php5/fpm/pool.d/*.conf<br />
01 [einpool]<br />
darauf hin, wo alle weiteren Konfigurationsdateien<br />
zu finden sind. Kommentare<br />
beginnen übrigens immer <strong>mit</strong> einem Semikolon<br />
<strong>und</strong> gehen bis zum Ende der<br />
Zeile. Anstelle der »php‐fpm.conf« findet<br />
man häufig auch eine Beispieldatei, unter<br />
Open Suse heißt sie »php‐fpm.conf.<br />
default«. Diese muss man dann lediglich<br />
korrekt umbenennen, eine Anpassung ist<br />
normalerweise nicht notwendig.<br />
Schwimmbadbau<br />
Die PHP-Interpreter-Prozesse fasst PHP-<br />
FPM in Pools zusammen, wobei mindestens<br />
ein Pool existieren muss. Für jeden<br />
Pool liegt im Unterverzeichnis »/ etc/<br />
php5/pool.d« genau eine Konfigurationsdatei<br />
<strong>mit</strong> der Endung ».conf«. Den<br />
voranstehenden Dateinamen darf man<br />
frei wählen, PHP-FPM liest einfach alle<br />
».conf«-Dateien in diesem Verzeichnis<br />
nacheinander ein. Um einen Pool vorübergehend<br />
zu deaktivieren, muss man<br />
folglich nur die Endung der zugehörigen<br />
Konfigurationsdatei ändern.<br />
Wurde PHP-FPM über den Paketmanager<br />
der Distribution installiert, existiert im<br />
Konfigurationsverzeichnis meist schon<br />
eine Datei für einen einfachen Pool, unter<br />
Debian beispielsweise <strong>mit</strong> dem Namen<br />
»www.conf«. Diese Datei sollte man<br />
nicht löschen, sondern sichern: Da in<br />
ihr ausführliche Kommentare alle möglichen<br />
Einstellungen erklären, dient sie als<br />
Nachschlagewerk. Die Informationen auf<br />
der PHP-FPM-Homepage [2] <strong>und</strong> in der<br />
PHP-Dokumentation [3] sind hingegen<br />
veraltet beziehungsweise unvollständig.<br />
Wer keine Beispiel-Datei vorfindet, lädt<br />
Listing 1: Einfacher Pool namens »einpool«<br />
02 ; Pool erreichbar unter TCP‐Port:<br />
03 listen = 127.0.0.1:9000<br />
04 <br />
05 ; Zugriff nur erlaubt von:<br />
06 listen.allowed_clients = 127.0.0.1<br />
07 <br />
08 ; Prozesse laufen unter Benutzer <strong>und</strong> Gruppe:<br />
09 user = www‐data<br />
10 group = www‐data<br />
11 <br />
12 ; Erzeuge Prozesse nach Bedarf:<br />
sich das offizielle PHP-Quellcode-Paket<br />
herunter <strong>und</strong> wirft dann einen Blick in<br />
die Datei »php‐fpm.conf.in« im Verzeichnis<br />
»sapi/fpm«.<br />
Ein Beispiel für eine minimale Konfigurationsdatei<br />
zeigt Listing 1: Zu Beginn<br />
erhält der Pool in eckigen Klammern den<br />
Namen »einpool«. Die darin zusammengefassten<br />
Interpreter-Prozesse bearbeiten<br />
dann alle Anfragen, die der Webserver<br />
über den TCP-Port 9000 an PHP-FPM<br />
übergibt. Die nächste Zeile »listen.allowed_clients«<br />
stellt sicher, dass am Port<br />
9000 nur Programme anklopfen dürfen,<br />
die auf dem gleichen Rechner wie<br />
PHP-FPM laufen (»localhost«, IP-Adresse<br />
»127.0.0.1«). Da<strong>mit</strong> verhindert man, dass<br />
Angreifer von außen PHP-FPM <strong>mit</strong> Anfragen<br />
zubombardieren oder die PHP-Interpreter<br />
sogar für eigene Zwecke missbrauchen.<br />
Möchte man hier Anfragen von<br />
weiteren IP-Adressen zulassen, hängt<br />
man diese einfach durch ein Komma getrennt<br />
hintereinander.<br />
Alle PHP-Interpreter-Prozesse aus dem<br />
Pool »einpool« laufen gemäß Listing 1 <strong>mit</strong><br />
den Rechten des Benutzers »www‐data«<br />
aus der Gruppe »www‐data« – hier also<br />
der Einfachheit halber <strong>mit</strong> denen des<br />
Webservers. In einer produktiven Umgebung<br />
legt man sicherheitshalber für jeden<br />
Pool einen eigenen neuen Benutzer an.<br />
13 pm = dynamic<br />
14 <br />
15 ; Maximale Anzahl Prozesse:<br />
16 pm.max_children = 96<br />
17 <br />
18 ; Starte <strong>mit</strong> so vielen Prozessen:<br />
19 pm.start_servers = 16<br />
20 <br />
Abbildung 3: PHP-FPM lauscht an TCP-Port 9000.<br />
21 ; Vorrat an Interpretern ohne Aufgabe:<br />
22 pm.min_spare_servers = 10<br />
23 pm.max_spare_servers = 70<br />
Um keine Ressourcen zu verschwenden,<br />
soll PHP-FPM die Interpreter-Prozesse<br />
nach Bedarf (»dynamic«) starten <strong>und</strong> beenden.<br />
Wie »pm.max_children« vorgibt,<br />
dürfen dabei in diesem Pool höchstens<br />
96 PHP-Interpreter-Prozesse gleichzeitig<br />
laufen. Da jeder Interpreter-Prozess eine<br />
Anfrage abarbeitet, kann der Pool aus<br />
Listing 1 folglich 96 Anfragen gleichzeitig<br />
bedienen.<br />
Wie viele Kind-Prozesse PHP-FPM direkt<br />
nach seinem Start aktiviert, legt »pm.<br />
start_servers« fest – in Listing 1 sind es<br />
16 Stück. Es handelt sich hierbei wohlgemerkt<br />
um die Anzahl der Kind-Prozesse,<br />
zusammen <strong>mit</strong> dem vom Administrator<br />
gestarteten Ausgangs-Prozess laufen so<strong>mit</strong><br />
insgesamt 17 Prozesse. Däumchen<br />
drehende PHP-Interpreter-Prozesse darf<br />
es maximal 70 geben (»pm.max_spare_<br />
servers«). Um für Anfragestürme gewappnet<br />
zu sein, lässt Listing 1 immer<br />
10 Stück in Wartestellung laufen (»pm.<br />
min_spare_servers«).<br />
Eine für alle<br />
Die von PHP-FPM gestarteten PHP-Interpreter-Prozesse<br />
übernehmen die Einstellungen<br />
aus der Datei »/etc/php5/fpm/<br />
php.ini«. Ihr Inhalt entspricht der allseits<br />
bekannten »php.ini«-Datei. Sie gilt jetzt<br />
allerdings für sämtliche Prozesse aus allen<br />
Pools. Erhöht man in ihr beispielsweise<br />
das »memory_li<strong>mit</strong>« auf »64M«,<br />
darf anschließend jeder PHP-Interpreter-<br />
Prozess 64 MByte Hauptspeicher seinem<br />
PHP-Skript zur Verfügung stellen. Wenn<br />
nur der Pool aus Listing 1 existiert, könnten<br />
maximal 96 Prozesse gleichzeitig laufen,<br />
was im schlimmsten Fall 96 * 64<br />
MByte = 6 GByte Hauptspeicher beanspruchen<br />
würde.<br />
Sollen die Prozesse in einem bestimmten<br />
Pool abweichende Einstellungen nutzen,<br />
30 Ausgabe 06-2012 Admin www.admin-magazin.de