Wie empfängt PHP die Anfrage?
Dieser Artikel beschreibt hauptsächlich mehrere Punkte
● Wie leitet Nginx Anfragen an PHPFPM weiter?
● Was genau sind CGI und FastCGI? Spielzeug?
● Was ist PHPFPM? Was macht es?
Einfache Szenenbeschreibung
Besuchen Sie ein mit PHP+Nginx+MySQL erstelltes Einkaufszentrum im Browser und kaufen Sie einen Artikel.
Analyse (hier wird auf zwei Ressourcen zugegriffen)
● Statische Ressourcen (einige Bilder, Symbole der Website usw.)
● Dynamisch Ressourcen (Der Preis der gekauften Waren, Produkteinführung usw.)
Der Browser initiiert eine Anfrage –> web_server (nginx) Verteilungsverarbeitung –> der ungefähre Prozess)
Wie verteilt Nginx Anfragen?
Wenn der Benutzer eine Anfrage initiiert (der Browser fordert standardmäßig Port 80 an), überwacht Nginx den Port 80 und konfiguriert die reguläre Übereinstimmung über Nginx, ob er zu einer statischen Ressource gehört statische Ressource, die Datei wird zurückgegeben und die Anfrage endet. Wenn es sich um eine dynamische Ressource handelt und das Anforderungs-PHP-Skript über reguläre Ausdrücke abgeglichen wird, verteilt es die Anforderung zur Verarbeitung über das Nginx-Modul ngx_http_fastcgi_module an PHPFPM und gibt das Ergebnis nach der Verarbeitung zurück.
● CGI
CGI ist eine Spezifikation für Webserver zur Ausführung externer Programme. Das bedeutet, dass Sie mit Ihrem Programm über CGI, über das CGI-Standardformat, kommunizieren können. Ihr Programm kann mit dem Browser interagieren.
(Ein einfaches Verständnis von CGI ist ein Protokoll, das festlegt, wie einige Dinge übertragen werden, wie Ihr Programm die Verarbeitung akzeptiert usw.)
● PHP-CGI
PHP -CGI ist eine Implementierungsversion des CGI-Protokolls PHP. PHP-CGI forkt einen Prozess für jede Anfrage und beendet ihn, nachdem die Verarbeitung abgeschlossen ist. (Dieses Muster wird fork-and-execute genannt). Dieses Modell entspricht nicht dem aktuellen Großverkehr und hat sich daher von der Bühne der Geschichte zurückgezogen.
● FastCGI
FastCGI ist eine aktualisierte Version von CGI. Es startet im Voraus einen Masterprozess, um die Konfigurationsdatei zu lesen, und teilt dann mehrere Arbeitsprozesse auf, um auf Verbindungen zu warten. Nach dem Abhören der Anfrage wird ein Arbeitsprozess für die spezifische Bearbeitung zugewiesen. Dadurch wird die Leistung des Programms erheblich verbessert. (FastCGi verwaltet den Prozess und zerstört ihn nicht so einfach, nachdem die Verarbeitung abgeschlossen ist. CGI erstellt für jede Anfrage einen Prozess und zerstört den Prozess.)
● PHPFPM
Als beste Sprache In der Welt muss man natürlich mit den Trends Schritt halten. Als festgestellt wurde, dass PHP-CGI schlecht funktionierte, tauchte zufällig das FastCGI-Protokoll auf. Daher implementiert PHP eine PHP-Version von FastCGI namens PHPFPM (FastCGI Process Manager). Wenn PHPFPM startet, werden ein Masterprozess und mehrere Arbeitsprozesse gestartet. Der Masterprozess wartet auf Anfragen und leitet sie zur Verarbeitung an den Arbeitsprozess weiter. Ihr Code verfügt über eine Kopie in jedem Arbeitsprozess.
SO
PHPFPM lauscht auf Port 9000, Nginx gleicht die PHP-Datei ab und leitet die Anfrage an PHPFPM weiter. Nachdem der PHPFPM-Master die Anfrage abgehört hat, wird er zur Verarbeitung zugewiesen (jeder Arbeitsprozess verfügt über einen PHP-Interpreter). Wenn PHPFPM gestartet wird, hat der Arbeitsprozess bereits die Konfiguration und den von Ihnen geschriebenen Code geladen. Daher führt der Arbeitsprozess die Anfrage sofort nach Erhalt aus und gibt dann das Ergebnis zurück.
ngx_http_fastcgi_module module
Wenn der Browser web_server anfordert, handelt es sich um ein http-Protokoll oder ein https-Protokoll, aber PHPFPM versteht nicht, was ich tun soll? Hier stellt nginx ein ngx_http_fastcgi_module bereit, das http- oder https-Anfragen FastCGI-Anfragen zuordnet. Auf diese Weise kann das PHP-Programm mit dem Benutzer interagieren.
Rein mein persönliches Verständnis, bitte weisen Sie darauf hin, wenn es einen Fehler gibt.
Verwandte Empfehlungen: [PHP-Tutorial]
Das obige ist der detaillierte Inhalt vonWie erhält PHP die Anfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!