Heim >Backend-Entwicklung >PHP-Tutorial >cgi, fastcgi, php-cgi, php-fpm usw

cgi, fastcgi, php-cgi, php-fpm usw

不言
不言Original
2018-04-20 10:52:451616Durchsuche

Dieser Artikel stellt die Analyse von CGI, FastCGI, PHP-CGI und PHP-FPM vor. Jetzt kann ich ihn mit Ihnen teilen

Definition


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

  • Dynamischer Planungsprozess




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

Muss beachtet werden. Interessant ist, dass PHP-FPM ein unabhängiges SAPI ist, das PHP-CGI nicht verwaltet. Mit anderen Worten: PHP-FPM hat nichts mit PHP-CGI zu tun Der Interpreter und der Unterprozess von php-fpm werden von selbst gespalten. Ja, php-cgi wird nicht aufgerufen. Wenn Sie php-cgi im System löschen, hat dies keine Auswirkungen auf den normalen Betrieb des php-fpm-Dienstes.


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

Linux view Das Verzeichnis, in dem sich Nginx, Apache, PHP, PHP-FPM, MySQL und Konfigurationselemente befinden

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn