Unterschiede und Nachteile zwischen: Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM

73

Es gibt nur wenige verschiedene PHP "Wrapper" (?). Was sind die Unterschiede zwischen ihnen? Ich habe versucht, einige zu googeln, kann aber keine Informationen finden. (mod-php ist nicht googleable).

Warum sollte ich mich für einen anderen entscheiden?

Gacek
quelle

Antworten:

141

Die Fragen sind etwas seltsam, es ist nicht klar, ob Sie nur nach PHP fragen oder Ihre Frage allgemeiner ist.

Ich werde Ihnen einen kurzen Überblick von der PHP-Seite geben.

Erstens sind die beiden Protokolle:

  • Mit CGI-Skripten können Sie ein serverseitiges Skript ausführen, wenn eine HTTP-Anforderung eingeht. das hat nichts mit PHP zu tun

  • FastCGI ist ein "besserer CGI" - CGI ist bekanntermaßen langsam, Fast CGI ist ein anderer Ansatz mit viel schnelleren Ergebnissen. das hat auch nichts mit PHP zu tun.

Nun die PHP-bezogenen Dinge:

  • mod_php führt ein PHP als Apache-Modul aus - das heißt, die PHP-Anforderung wird unter dem Apache-Prozess mit allem ausgeführt, was dazu gehört - Apache-Prozesse werden durch die Apache-Konfiguration definiert, PHP wird mit Apache-Erlaubnis ausgeführt usw.

  • PHP-FPM ist die FastCGI-Implementierung von PHP. PHP-FPM wird als eigenständiger FastCGI-Server ausgeführt und Apache stellt über das Apache-Modul, normalerweise mod_fcgid oder mod_fastcgi, eine Verbindung zum Server her. Ich persönlich denke, das ist viel besser als das Ausführen als mod_php, aber es hängt von Ihren Anforderungen ab und ist auch etwas komplexer. In dieser Konfiguration werden Berechtigungen, Prozesse, verwandte Dinge und alles unter PHP-Konfiguration, PHP-Benutzer usw. ausgeführt. & Apache verbindet sich mit PHP wie mit einem Server. In dieser Konfiguration ist es auch möglich, einen Pool von PHP-Servern und einen PHP-Server auf einem anderen Computer als Apache zu haben. Sie sagen, dies ist fast so schnell wie die Verwendung des Apache-Moduls und es gibt Vorteile einer besseren Kontrolle über die PHP-Konfiguration.

  • SuPHP - Dies wurde hauptsächlich verwendet, um einige Probleme von mod_php im Zusammenhang mit Berechtigungen zu beheben. mit mod_php werden PHP-Skripte unter dem Apache-Benutzer / der Apache-Gruppe ausgeführt; mod_suphp kann die Skripte in verschiedenen Benutzer ausführen; Ich habe es nie benutzt, PHP-FPM sollte jetzt eine viel bessere Wahl sein

Also im Grunde genommen:

  • CGI, Fast-CGI sind Protokolle; CGI ist langsam, Fast-CGI ist viel schneller
  • mod_php (mit Unterstrich) und PHP-FPM sind zwei grundlegende Möglichkeiten, um PHP auszuführen
  • mod_SuPHP ähnelt mod_php, kann jedoch den Benutzer / die Gruppe ändern, unter dem / der der Prozess ausgeführt wird
Aleš Krajník
quelle
Vielleicht kläre ich, was mich zu dieser Frage inspiriert hat. Ich habe gerade einen VPS mit einem ISPConfig-Panel bekommen (Opensource-Panel für Admin-Seiten). Dort kann ich eine PHP-Version für Server / Seite auswählen. Und die sind dort aufgelistet. Es scheint also so, als würde bei der Auswahl von PHP-FPM FastCGI mit zusätzlichen "Wrappern" ausgewählt?
Gacek
12
Ich weiß nicht, was das ISPConfig-Panel wirklich verwendet, aber PHP, das als PHP-FPM ausgeführt wird, bedeutet, dass PHP seinen eigenen FastCGI-Server startet und über das FastCGI-Protokoll auf Anfragen wartet. Der HTTP-Server empfängt Anfragen aus dem Internet und behandelt diese wie gewohnt. Falls eine Seite mit PHP ausgeführt werden muss, wird die Anfrage an das FastCGI-Protokoll an PHP übergeben und das Ergebnis an den Browser zurückgesendet. Stellen Sie sich das als HTTP-Server vor, der zwischen Browser und PHP-Server (PHP-FPM FastCGI) steht. PHP-FPM ist eine Implementierung des FastCGI-Protokolls.
Aleš Krajník
@ AlešKrajník danke für diese ausführliche Erklärung. Nun, ich habe versucht, PHP als separater Benutzer / Gruppe auszuführen. Also habe ich mit Su-exec angefangen und bin in eine Sackgasse geraten, und dann haben ein paar Leute php-fpm empfohlen, was Sie erklärt haben. Ich bin jedoch immer noch verwirrt über die Module mog_cgi, mod_cgid, mod_fastcgi, mod_fcgi und wie diese mit php-fpm funktionieren. Ich habe auch in einem anderen Tutorial gelesen, dass sie mod_fcgid und mod_proxy_fcgi verwenden. Wie schwer zu verstehen, wie alle Teile zusammenkommen.
David Okwii
1
@landed PHP-FPM binary ist seit 5.3.3 oder 5.4.0 Bestandteil jeder PHP-Distribution ( siehe php-fpm.org ) für diese spezielle PHP-Version.
Aleš Krajník,
2
Bei php-fpm geht es darum, die Initialisierungskosten zu senken. php-fpm startet mehrere PHP-Prozesse vorab, ist bereit, Anfragen zu verarbeiten, und lässt sie schlafen, bis Anfragen eingehen - was bedeutet, dass es viel schneller reagieren kann als herkömmliche CGI-Prozesse, da PHP bereits ausgeführt wird, wenn Anfragen eingehen, im Gegensatz zu herkömmlichem CGI. Wenn für jede Anfrage ein neuer PHP-Prozess gestartet wird, wird der PHP-Prozess von php-fpm nach der Bearbeitung von Anfragen nicht heruntergefahren, sondern es werden weiterhin dieselben Prozesse verwendet. - Mit 0 Overhead beim Starten und Stoppen von Prozessen reagiert php-fpm viel schneller. Das Starten und Stoppen von Prozessen nimmt Zeit in Anspruch.
Hanshenrik