FastCGI ist das Protokoll, über das ein Webserver Anfragen an dauerhaft laufende Programmprozesse übergibt. Für PHP ist es heute der übliche Weg: Der Webserver liefert Dateien aus und schickt alles Übrige an einen Prozess, der schon läuft.
- FastCGI
Das Protokoll, über das ein Webserver Anfragen an dauerhaft laufende Programmprozesse übergibt.
Beispiel: „Nginx gab die Anfrage über FastCGI an den PHP-Prozess weiter und wartete auf die Antwort.“Entstanden 1996 bei Open Market als Erweiterung von CGI; die Abkürzung CGI steht für Common Gateway Interface, auf Deutsch etwa gemeinsame Vermittlungsschnittstelle. Gesprochen wird über einen Unix-Socket oder über TCP.
Abgrenzung zum alten CGI: Dieses startete für jede Anfrage einen neuen Prozess. FastCGI hält eine Gruppe von Prozessen bereit und spart damit den Start, siehe PHP-Handler.
Was FastCGI vom alten CGI unterscheidet
Die Lebensdauer der Prozesse. Beim alten Verfahren kostete jede Anfrage einen Programmstart samt Einlesen aller Dateien; bei FastCGI stehen die Prozesse bereit und nehmen eine Anfrage nach der anderen an.
Daraus folgt der zweite Vorteil: Zwischenspeicher bleiben warm. OPcache hält den übersetzten PHP-Code im Prozess, und ein neuer Aufruf trifft auf fertige Arbeit statt auf einen leeren Speicher.
Wie PHP-FPM auf FastCGI aufsetzt
Als Verwalter der Prozessgruppe. PHP-FPM startet die Prozesse, hält sie je Kunde unter eigenem Systemnutzer und regelt über pm.max_children, wie viele gleichzeitig arbeiten dürfen.
Der Webserver kennt davon allein die Adresse des Sockets. Apache spricht ihn über mod_proxy_fcgi an, Nginx über fastcgi_pass, und beide geben Pfad, Kopfzeilen und Formulardaten im Format des Protokolls weiter.
Wo FastCGI im Betrieb klemmt
An der Zahl der Prozesse. Sind alle belegt, warten neue Anfragen in einer Schlange, und nach Ablauf der Wartezeit antwortet der Webserver mit 502 oder 504, obwohl PHP selbst ohne Fehler arbeitet.
Der zweite Punkt ist die Zeitgrenze. Ein langer Import läuft gegen request_terminate_timeout und wird abgeschnitten; solche Arbeiten gehören deshalb auf die Kommandozeile und nicht hinter den Webserver.