26.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.

PHP-FPM<br />

Netzwerk<br />

Client<br />

startet<br />

(PHP-)Interpreter<br />

führt aus<br />

Client<br />

Webserver<br />

Webserver<br />

TCP-Port 9000<br />

Socket<br />

PHP-FPM<br />

Interpreter-Prozess<br />

...<br />

Interpreter-Prozess<br />

Skript<br />

Abbildung 1: Beim CGI-Standard startet der Webserver den Interpreter wie ein<br />

ganz normales Kommandozeilenprogramm.<br />

Abbildung 2: Der Webserver reicht entweder über einen TCP-Port oder einen<br />

Unix Socket die Anfrage an PHP-FPM weiter, der sie von einem PHP-Interpreter-<br />

Prozess abarbeiten lässt.<br />

zeit überschritten haben – inklusive der<br />

verursachenden PHP-Funktion. Das hilft<br />

nicht nur bei der Fehlersuche während<br />

der Entwicklung, sondern deckt auch<br />

Angriffe auf.<br />

Richtig gepoolt<br />

Die PHP-Interpreter-Prozesse lassen sich<br />

zu sogenannten Pools zusammenfassen.<br />

Jeder Pool kann dabei eine eigene PHP-<br />

Konfiguration besitzen <strong>und</strong> seine Prozesse<br />

sogar in eine Chroot-Umgebung<br />

einsperren. Darüber hinaus darf der<br />

Administrator festlegen, unter welchem<br />

Benutzerkonto die Prozesse eines Pools<br />

vor sich hinwerkeln. Eingehende Anfragen<br />

lassen sich dann gezielt an einen der<br />

Pools weiterreichen. Da<strong>mit</strong> könnte man<br />

beispielsweise einen maßgeschneiderten<br />

Pool für das Blog, einen weiteren für das<br />

Forum <strong>und</strong> einen dritten für die offizielle<br />

Website abstellen.<br />

Da jeder Pool die Anfragen auf einer eigenen<br />

TCP-Adresse entgegennimmt, kann<br />

man bei steigender Last der Forums-<br />

Website den zugehörigen Pool auf einen<br />

eigenen, leistungsfähigeren Rechner auslagern<br />

– dazu sind nur ein paar einfache<br />

Änderungen in den Konfigurationsdateien<br />

notwendig.<br />

PHP-FPM kommt sogar <strong>mit</strong> Zusatzmodulen<br />

wie eAccelerator oder APC zurecht,<br />

die den vom PHP-Interpreter kompilierten<br />

Quelltext (Opcodes) puffern. Dies<br />

spart bei der nächsten Anfrage eine erneute<br />

Übersetzung, was wiederum den<br />

Seitenaufbau beschleunigt. Ein Interpreter-Prozess<br />

kann den Opcode-Cache jedoch<br />

(versehentlich) überschreiben oder<br />

zerstören. PHP-FPM überwacht deshalb<br />

den Cache <strong>und</strong> startet sich bei Amok<br />

laufenden Prozessen automatisch einmal<br />

neu.<br />

Startrampe<br />

Seit PHP 5.4.0 gehört PHP-FPM zum offiziellen<br />

PHP-Paket <strong>und</strong> liegt da<strong>mit</strong> auch<br />

den meisten aktuellen Linux-Distributionen<br />

bei. Ein entsprechendes Paket findet<br />

man leicht über den Paketmanager,<br />

meistens heißt es »php5‐fpm«. Eine der<br />

wenigen Ausnahmen ist noch Debian 6<br />

(Squeeze). Dort kann man jedoch PHP-<br />

FPM über das Dotdeb-Repository hinzuholen,<br />

indem man in »/etc/apt/sources.<br />

list« die Zeile:<br />

deb http://packages.dotdeb.org stable all<br />

ergänzt. Das benötigte Paket installiert<br />

dann:<br />

apt‐get update<br />

apt‐get install php5‐fpm<br />

Da man die von den Pools verwendeten<br />

TCP-Ports frei vergeben kann, lässt sich<br />

PHP-FPM übrigens auch parallel zu anderen<br />

FastCGI-Interpretern betreiben.<br />

PHP-FPM ist im Moment auf Linux zugeschnitten,<br />

weshalb es im Windows-<br />

Paket von PHP fehlt. Die dort enthaltene<br />

»php‐cgi.exe« ist nur der herkömmliche<br />

FastCGI-Interpreter. Windows-<br />

Administratoren müssen daher entweder<br />

PHP-FPM umständlich in einer Cygwin-<br />

Umgebung per Hand übersetzen <strong>und</strong> in<br />

Betrieb nehmen oder aber PHP-FPM getrennt<br />

vom Webserver auf einem eigenen<br />

Linux-Rechner laufen lassen. Die letztere<br />

Variante ist dabei die weitaus einfachere,<br />

zumal man das Linux-System <strong>mit</strong> PHP-<br />

FPM auch in eine virtuelle Maschine<br />

verbannen kann. Im Folgenden soll daher<br />

weiterhin die Inbetriebnahme unter<br />

Linux im Vordergr<strong>und</strong> stehen.<br />

Sämtliche Konfigurationsdateien für PHP-<br />

FPM <strong>und</strong> seine PHP-Interpreter-Prozesse<br />

sammelt das Verzeichnis »/etc/php5/<br />

fpm« (vorausgesetzt ,die eigene Distribution<br />

gibt nicht andere Verzeichnisse vor).<br />

Die Einrichtung von PHP-FPM geschieht<br />

in der Konfigurationsdatei »php‐fpm.<br />

CGI-Beschleuniger<br />

Webserver sind eigentlich von Haus aus recht<br />

dumme Gesellen. Sie können lediglich Dateien<br />

<strong>und</strong> so<strong>mit</strong> statische Seiten ausliefern. Um eine<br />

Webseite dynamisch zu erzeugen, braucht der<br />

Webserver Hilfe von einem weiteren Programm –<br />

wie etwa dem PHP-Interpreter. Dieser führt dann<br />

wiederum eines oder mehrere (PHP-)Skripte aus,<br />

die schließlich die Seite zusammenklöppeln. Wie<br />

der Webserver den Interpreter aufrufen <strong>und</strong> dieser<br />

die fertige Seite zurückgeben muss, regelt<br />

seit 1993 ein Standard namens Common Gateway<br />

Interface, kurz CGI. Sobald eine Anfrage<br />

beim Webserver eingeht, setzt dieser ein paar<br />

Umgebungsvariablen <strong>und</strong> startet dann den Interpreter.<br />

Der wiederum wertet die Umgebungsvariablen<br />

aus <strong>und</strong> gibt die erzeugte Webseite über<br />

die Standardausgabe an den Webserver zurück.<br />

Abbildung 1 veranschaulicht das Zusammenspiel<br />

noch einmal.<br />

Bei dieser Vorgehensweise startet der Webserver<br />

bei jeder Anfrage erneut den dicken Interpreter.<br />

Das frisst zum einen Rechenzeit <strong>und</strong><br />

zum anderen auch Hauptspeicher. Häufig dauert<br />

das Laden des Interpreters sogar länger als die<br />

Ausführung des eigentlichen Skriptes. Um die<br />

Antwortzeiten zu erhöhen <strong>und</strong> den Server zu<br />

entlasten, entstand Mitte der 90er-Jahre die<br />

FastCGI-Schnittstelle [1]. Dabei startet der Interpreter<br />

genau einmal <strong>und</strong> läuft dann im Hintergr<strong>und</strong><br />

ständig weiter.<br />

Der Webserver reicht dann die Anfragen über<br />

einen TCP-Port oder einen Unix Domain Socket<br />

an den Interpreter weiter.<br />

Da die Kommunikation über die bekannten Netzwerkstandards<br />

läuft, könnte der Interpreter sogar<br />

auf einem komplett anderen Rechner als<br />

der Webserver laufen. Die gesamte Umgebung<br />

lässt sich so wesentlich besser <strong>und</strong> einfacher<br />

skalieren.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

29

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!