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


Es gibt ein paar verschiedene php "Wrapper" (?). Was sind Unterschiede zwischen ihnen? Versucht, etwas zu googeln, aber scheint keine Informationen zu finden. (mod-php ist nicht googlefähig).

Warum könnte ich eins über das andere wählen?


59
2017-11-20 10:31


Ursprung




Antworten:


Die Frage ist ein wenig 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, die beiden Protokolle:

  • CGI-Skripts ist eine Möglichkeit, ein serverseitiges Skript auszuführen, wenn eine HTTP-Anfrage kommt; Das hat nichts mit PHP zu tun

  • FastCGI ist ein "besseres CGI" - CGI ist bekanntlich langsam, Fast CGI ist ein anderer Ansatz mit viel schnelleren Ergebnissen; Das hat auch nichts mit PHP zu tun.

Jetzt die PHP verwandten Dinge:

  • mod_php betreibt PHP als Apache-Modul - das heißt PHP-Anfrage läuft unter Apache-Prozess mit allem, was dazu gehört - Apache-Prozesse werden durch die Apache-Konfiguration definiert, PHP wird mit Apache-Berechtigung etc. ausgeführt

  • PHP-FPM ist die FastCGI-Implementierung von PHP; PHP-FPM läuft als eigenständiger FastCGI-Server und Apache verbindet sich mit dem Apache-Modul, normalerweise mod_fcgid oder mod_fastcgi; 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 ein wenig komplexer; In dieser Konfiguration werden Berechtigungen, Prozesse und ähnliches 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 zu haben und PHP-Server auf physikalisch anderen Rechnern als Apache zu haben. Sie sagen, das ist fast so schnell wie mit dem Apache-Modul 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 lösen; mit mod_php PHP-Skripte werden unter dem Apache-Benutzer / Gruppe ausgeführt; mod_suphp kann die Skripte in verschiedenen Benutzer ausführen; Ich habe es nie benutzt, PHP-FPM sollte jetzt viel bessere Wahl sein

Also im Grunde genommen:

  • CGI, Fast-CGI sind Protokolle; CGI ist langsam, Fast-CGI ist viel schneller
  • mod_php (mit Unterstreichung) und PHP-FPM sind zwei grundlegende Wege, um PHP auszuführen
  • mod_SuPHP ist ähnlich wie mod_php, kann aber den Benutzer / die Gruppe ändern, unter der der Prozess läuft

121
2017-11-20 11:05



Vielleicht werde ich klären, was mich für diese Frage inspiriert hat. Ich habe gerade ein VPS mit einem ISPConfig-Panel (Opensource-Panel zu Admin-Seiten). Dort kann ich eine PHP-Version für Server / Seite auswählen. Und diese sind dort aufgeführt. Im Grunde genommen scheint es so zu sein, dass PHP-FPM FastCGI mit zusätzlichen "Wrappern" auswählt? - Gacek
Ich weiß nicht, was das ISPConfig-Panel wirklich verwendet, aber PHP läuft als PHP-FPM bedeutet, dass PHP seinen eigenen eingebauten FastCGI-Server startet und auf Anfragen über das FastCGI-Protokoll wartet. Der HTTP-Server erhält Anfragen aus dem Internet und behandelt sie wie gewöhnlich. Falls eine Seite mit PHP ausgeführt werden muss, wird das FastCGI-Protokoll an PHP übergeben und das Ergebnis wird an den Browser zurückgesendet. Stellen Sie sich das als HTTP Server zwischen Browser und PHP (PHP-FPM FastCGI) Server vor. 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 separate Benutzer / Gruppe zu betreiben. Also habe ich mit Su-exec begonnen und eine Sackgasse erreicht und dann haben einige Leute php-fpm empfohlen, die du erklärt hast. Bin aber immer noch verwirrt über die Module mog_cgi, mod_cgid, mod_fastcgi, mod_fcgi und wie diese mit php-fpm funktionieren. Außerdem habe ich in einem anderen Tutorial gelesen, dass sie mod_fcgid und mod_proxy_fcgi benutzen. Wie schwierig zu verstehen, wie alle Teile zusammenkommen. - David Okwii
@landed PHP-FPM binary ist seit 5.3.3 oder 5.4.0 Bestandteil jeder PHP-Distribution (siehe auch: php-fpm.org), für diese spezifische PHP-Version. - Aleš Krajník
Bei php-fpm geht es darum, Initialisierungskosten zu sparen. php-fpm startet mehrere php-Prozesse vor, die bereit sind, Anfragen zu bearbeiten und sie schlafen zu lassen, bis Anfragen eingehen - was bedeutet, dass sie viel schneller als herkömmliche CGIs reagieren können, da php bereits läuft, wenn Anfragen kommen, im Gegensatz zu herkömmlichen CGI. Wenn für jede Anfrage ein neuer php-Prozess gestartet wird, beendet php-fpm den php-Prozess nach der Verarbeitung der Anfragen nicht, sondern verwendet dieselben Prozesse weiter. - Mit 0 Overhead von Starten und Stoppen von Prozessen reagiert php-fpm viel schneller. Starten und Stoppen von Prozessen benötigt Zeit. - hanshenrik