24.02.2014 Aufrufe

ADMIN Magazin Gestapelt - Schneller und sicherer mit RAID (Vorschau)

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!