Dieser Artikel stellt die Analyse von CGI, FastCGI, PHP-CGI und PHP-FPM vor. Jetzt kann ich ihn mit Ihnen teilen
Zunächst einmal: Wozu dient CGI? CGI soll sicherstellen, dass die vom Webserver übergebenen Daten in einem Standardformat vorliegen, was für Autoren von CGI-Programmen praktisch ist.
Der Webserver (wie Nginx) ist lediglich ein Verteiler von Inhalten. Wenn beispielsweise
/index.html
angefordert wird, findet der Webserver die Datei im Dateisystem und sendet sie an den Browser. Dabei handelt es sich um statische Daten. Okay, wenn die Anfrage jetzt/index.php
lautet, weiß nginx laut Konfigurationsdatei, dass es sich nicht um eine statische Datei handelt und vom PHP-Parser verarbeitet werden muss, dann wird es die Anfrage einfach verarbeiten und an PHP übergeben Parser. Welche Daten wird Nginx an den PHP-Parser übergeben? Die URL muss vorhanden sein, die Abfragezeichenfolge muss vorhanden sein, die POST-Daten müssen vorhanden sein und der HTTP-Header muss vorhanden sein. Nun, CGI ist das Protokoll, das festlegt, welche Daten übertragen werden sollen und in welchem Format sie übergeben werden sollen das Backend zur Bearbeitung der Anfrage. Überlegen Sie genau, woher die Benutzer kommen, die Sie in Ihrem PHP-Code verwenden.Wenn der Webserver die
/index.php
-Anfrage erhält, startet er das entsprechende CGI-Programm, hier ist der PHP-Parser. Als nächstes analysiert der PHP-Parser die Datei php.ini, initialisiert die Ausführungsumgebung, verarbeitet die Anforderung, gibt das verarbeitete Ergebnis in dem von CGI angegebenen Format zurück und beendet den Prozess. Der Webserver gibt die Ergebnisse dann an den Browser zurück.
Okay, CGI ist ein Protokoll und hat nichts mit Prozessen oder ähnlichem zu tun. Was ist also fastcgi? Fastcgi wird verwendet, um die Leistung von CGI-Programmen zu verbessern.
Verbessern Sie die Leistung. Was sind also die Leistungsprobleme von CGI-Programmen? „Der PHP-Parser analysiert die Datei php.ini und initialisiert die Ausführungsumgebung“, das war’s. Standard-CGI führt diese Schritte für jede Anfrage aus (seien Sie nicht müde! Den Prozess zu starten ist sehr ermüdend!), sodass die Bearbeitungszeit jedes Mal relativ lang ist. Das ist offensichtlich unvernünftig! Wie macht Fastcgi das? Zuerst startet Fastcgi einen Master, analysiert die Konfigurationsdatei, initialisiert die Ausführungsumgebung und startet dann mehrere Worker. Wenn eine Anfrage eingeht, leitet der Master diese an einen Worker weiter, der dann sofort die nächste Anfrage annehmen kann. Das vermeidet Doppelarbeit und ist natürlich hocheffizient. Und wenn nicht genügend Arbeiter vorhanden sind, kann der Master je nach Konfiguration mehrere Arbeiter vorab starten und warten. Wenn zu viele Arbeiter im Leerlauf sind, werden natürlich einige gestoppt, was die Leistung verbessert und Ressourcen spart. Dies ist das Prozessmanagement von fastcgi.
cgi
Die universelle Gateway-Schnittstelle, der Schnittstellenstandard zwischen externen Programmen und Webservern, ist der Prozess der Informationsübertragung zwischen CGI-Programmen und Webservern
Jede Anfrage generiert einen CGI-Prozess. Nachdem das CGI-Programm ausgeführt wurde, wird der Prozess beendet
Unabhängig vom Server und der unabhängigen Programmiersprache
FastCgi
FastCgi ist wie ein residentes Cgi, es kann dies immer ausführen, solange es aktiviert ist, es ist nicht notwendig, jedes Mal zu forken, und es unterstützt auch verteiltes Computing, das heißt, das FastCgi-Programm kann auf einem anderen Host als dem Website-Server ausgeführt werden und Anfragen von anderen Website-Servern akzeptieren
Kann mehrere Anfragen gleichzeitig verarbeiten Zeit
Langzeitspeichernutzung
php-cgi
PHPs offizieller FastCGI-Prozessmanager
Nachdem Sie php.ini geändert haben, müssen Sie php-cgi beenden und dann php.ini starten, damit es wirksam wird. Reibungsloser Neustart nicht möglich
Speicher kann nicht dynamisch zugewiesen werden
php-fpm
Inoffiziell The fastCgi Der Prozessmanager war offiziell ab PHP 5.4 enthalten. Beim Kompilieren von PHP benötigen Sie nur –enable-fpm, um PHP-FPM zu aktivieren.
, wodurch PHP reibungslos neu gestartet werden kann
Nginx ist nur für die Reverse-Proxy-/Anfrageweiterleitung verantwortlich und nicht für die Verwaltung des PHP-CGI-Prozesses, daher wird Nginx im Allgemeinen mit PHP-FPM verwendet, das den Arbeitsprozess (untergeordneten Prozess) selbst verwalten kann
php-fpm ist ein Arbeitsprozess unter der PM = statischen Konfiguration. Permanent im Hintergrund, das heißt, wenn Sie 5 Worker-Prozesse pm.max_children = 5 konfigurieren, wird der PHP-FPM-Dienst gestartet, wenn er gestartet wird Verteilt automatisch 5 untergeordnete Prozesse und bleibt im Hintergrund und wird nicht beendet, wenn die Anforderungsverarbeitung abgeschlossen ist. Wenn Sie eine datenbankbeständige Verbindung in einem PHP-Skript verwenden, werden diese 5 Arbeitsprozesse ebenfalls hergestellt und aufrechterhalten 5 dauerhafte Verbindungen zur Datenbank, um die Datenbankverbindung bei der Verarbeitung mehrerer Anfragen wiederzuverwenden, um den Aufbau/die Freigabe einer Datenbankverbindung für jede Anfrage zu vermeiden, was für das Skript in php-fpm vollständig transparent ist. Das Skript muss beim Start nur die Verwendung dauerhafter Verbindungen angeben.
php-fpm arbeitet in der pm = dynamischen Konfiguration [Teil], um im Hintergrund zu bleiben, das heißt, um eine bestimmte Anzahl residenter Prozesse aufrechtzuerhalten automatisch heruntergefahren werden, wenn der Dienst inaktiv ist. Anbieter virtueller Hosts sollten diese Methode bevorzugen.
Kurz gesagt, der PHP-FPM-Betriebsmodus ähnelt dem Prefork MPM und dynamischer Multiprozess-Netzwerkdienst.
php-cgi ist ein früher produzierter FastCGI-Manager von PHP offiziell und wird nicht unterstützt. Wenn Sie php.ini ändern, müssen Sie für einen reibungslosen Neustart das ursprüngliche PHP-CGI beenden und neu starten, damit die dynamische Worker-Planung wirksam wird. Sie können nur angeben, wie viele Worker gestartet werden sollen am Anfang.
php-fpm ist ein FastCGI-Prozessmanager, der erst in 5.3.3 hinzugefügt wurde. Er fügt eine dynamische Planungsfunktion hinzu, die die Anzahl der Arbeitsprozesse je nach Änderung des eingehenden Anforderungsdrucks dynamisch erhöhen oder verringern kann unterstützt den Befehl „reload“, damit der Arbeitsprozess nach der aktuellen Anforderung einen Neustart durchführen kann und die neue php.ini-Konfiguration anwendet.
php54 war vorher eine Beziehung, eine andere Beziehung nach php54.
Vor php54 war php-fpm (Kompilierung von Drittanbietern) der Manager, php-cgi der Interpreter
Nach php54 war php-fpm ( offiziell im Lieferumfang enthalten), Master- und Pool-Modi. php-fpm und php-cgi haben nichts miteinander zu tun. php-fpm ist sowohl ein Dolmetscher als auch ein Manager
Referenzwebsite https://www.zhihu.com/question/55835080
https://segmentfault .com /q/1010000000256516
Verwandte Empfehlungen:
Darstellung der Beziehung zwischen CGI, FastCGI und PHP-FPM
Das obige ist der detaillierte Inhalt voncgi, fastcgi, php-cgi, php-fpm usw. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!