Detaillierte Erläuterung des Funktionsprinzips der Ausführungsanforderung von Nginx + PHP

Detaillierte Erläuterung des Funktionsprinzips der Ausführungsanforderung von Nginx + PHP

So funktioniert PHP

Lassen Sie uns zunächst die Beziehung zwischen den häufig verwendeten CGI, PHP-CGI, FastCGI und PHP-FPM verstehen, um das Funktionsprinzip von PHP zu verstehen.

CGI-Protokoll

Das CGI-Protokoll wird verwendet, um zu bestimmen, welche Daten und in welchem ​​Format der Webserver (z. B. Nginx) an den Inhaltsverteilungsserver sendet.

PHP-CGI-Prozessinterpreter

php-cgi ist der CGI-Protokollprozessinterpreter von PHP. Bei jedem Start muss er den Prozess des Ladens der php.ini-Datei -> Initialisieren der Ausführungsumgebung -> Verarbeiten der Anfrage -> Zurückgeben des Inhalts an den Webserver -> Beenden des php-cgi-Prozesses durchlaufen.

FastCGI-Protokoll

Das FastCGI-Protokoll ist eine Ergänzung zur Effizienzsteigerung des CGI-Protokolls. Es zielt hauptsächlich darauf ab, die Notwendigkeit zu optimieren, bei jeder eingehenden Anfrage einen CGI-Interpreterprozess zu starten. Der CGI-Interpreterprozess muss die php.ini-Datei nicht mehr jedes Mal neu laden und die Ausführungsumgebung initialisieren, wenn er eine Webserveranforderung empfängt.

php-fpm-Prozessmanager

PHP-FPM ist eine Implementierung des FastCGI-Protokolls. Es ist ein Prozessmanager. Beim Start besteht es aus zwei Teilen: dem Masterprozess und dem Workerprozess. Der Masterprozess überwacht den Port und empfängt Anfragen vom Webserver. Normalerweise gibt es mehrere Workerprozesse. Jeder Workerprozess verfügt über einen CGI-Prozessinterpreter zum Ausführen von PHP-Code.

PHP-Start und Funktionsprinzip

Wenn phpfpm gestartet wird, wird der Masterprozess gestartet, die Datei php.ini geladen, die Ausführungsumgebung initialisiert und mehrere Arbeitsprozesse gestartet. Jedes Mal, wenn eine Anfrage eingeht, wird sie zur Verarbeitung an den Arbeitsprozess weitergeleitet.

PHP-Prinzip für sanften Neustart

Jedes Mal, wenn die php.ini-Konfiguration geändert und neu gestartet wird, wird ein neuer Arbeitsprozess gestartet, um die neue Konfiguration zu laden. Nach Abschluss der Arbeit wird der vorhandene Prozess zerstört, wodurch ein reibungsloser Neustart gewährleistet wird.

So funktioniert nginx

Wenn Sie das Prinzip der Zusammenarbeit zwischen Nginx und PHP verstehen möchten, müssen Sie zuerst auch den Serverteil der Nginx-Konfigurationsdatei verstehen.

Server {
  listen 80; #Hört auf Port 80 und empfangt HTTP-Anfragen server_name www.example.com; #Speichert URLs im Allgemeinen und gibt an, welches Projekt konfiguriert ist root /home/wwwroot/zensmall/public/; #Die Stammverzeichnisadresse des Codes oder der Starteintrag des Codes index index.php index.html; #Standard-Homepage der Website #Wenn die URL der angeforderten Website eine Präfixübereinstimmung am Standort durchführt und die längste übereinstimmende Zeichenfolge dieses Konfigurationselement ist, überprüft die Reihenfolge, ob die Dateien vorhanden sind, und gibt die erste gefundene Datei zurück location / {
     #try_files, prüfe der Reihe nach, ob die Dateien existieren und gib die erste gefundene Datei zurück#$uri stellt die aktuelle Adresse ohne Anfrageparameter dar#$query_string stellt die Parameter dar, die von der Anfrage getragen werdentry_files $uri $uri/ /index.php?$query_string; #Überprüfe die $uri-Datei, um zu sehen, ob die $uri-Adresse existiert. Wenn ja, gib die erste gefundene Datei zurück; wenn keine existiert, initiiere eine interne Anfrage zum Zugriff auf /index.php?$query_string, die mit der folgenden Standortanfrage neu abgeglichen wird}
  
   #Wenn die PHP-Datei der Website angefordert wird, wird der Reverse-Proxy an php-fpm gesendet, um den Speicherort ~ \.php$ { zu verarbeiten.
     include fastcgi_params; #Fastcgi-Konfigurationsdatei einführen fastcgi_pass 127.0.0.1:9000; #IP-Adresse und Port festlegen, auf die der PHP-Fastcgi-Prozess hört fastcgi_index index.php; #Homepage-Datei festlegen fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #Pfad der Skriptdateianforderung festlegen}
}

Die allgemeine Bedeutung der obigen Serverkonfiguration lautet: Jedes Mal, wenn nginx auf Port 80 auf eine URL-Anforderung hört, führt es einen Standortabgleich mit der URL durch. Wenn die /-Regel übereinstimmt, wird eine interne Anforderungsumleitung vorgenommen, die eine interne Anforderung an /index.php?$query_string initiiert, und die entsprechende Standortkonfigurationsregel sendet die Anforderung an den Masterprozess von php-fpm, der auf Port 9000 lauscht.

Zusammenfassen

Im Folgenden wird der einfachste Benutzeranforderungsprozess zusammengefasst:

Benutzer greift auf Domänennamen zu -> DNS-Auflösung des Domänennamens -> Anfrage an entsprechenden IP-Server und Port -> nginx hört auf Anfrage des entsprechenden Ports -> nginx gleicht den Standort der URL ab -> führt Regeln unter dem übereinstimmenden Standort aus -> nginx leitet Anfrage an PHP weiter -> php-fpm-Masterprozess hört auf Nginx-Anfrage -> Masterprozess weist Anfrage einem der inaktiven Arbeitsprozesse zu -> Arbeitsprozess führt Anfrage aus -> Arbeitsprozess gibt Ausführungsergebnis an nginx zurück -> nginx gibt Ergebnis an Benutzer zurück

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Prinzips und des Implementierungsprozesses der Nginx-Konfiguration https
  • Prinzip und Anwendungsbeispiele des URL-Umschreibmechanismus von Nginx
  • Unterschied und Prinzipanalyse des Nginx-Forward- und Reverse-Proxy
  • Entdecken Sie die Wahrheit hinter dem Neuladevorgang in Nginx
  • Nginx-Server-Lastausgleich und SSL-Prinzip, SSL-Schlüsselpaar generieren, Beispiel für Nginx-Konfiguration und SSL-Betrieb
  • Detaillierte Erklärung der Funktionsweise von Nginx

<<:  5 Tipps zum Schutz Ihres MySQL Data Warehouse

>>:  So verwenden Sie die Form-Komponente von Antd in React, um Formularfunktionen zu implementieren

Artikel empfehlen

Verwendung des Array-Filters filter() in JS

Inhaltsverzeichnis 1. Einleitung 2. Einführung in...

So schreiben Sie Objekte und Parameter, um Flash in Firefox abzuspielen

Code kopieren Der Code lautet wie folgt: <Obje...

js, um den Effekt eines Lichtschalters zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...

Lösung für viele Zeilenumbrüche und Wagenrückläufe in MySQL-Daten

Inhaltsverzeichnis Finden Sie das Problem 1. So e...

Detaillierte Erläuterung des adaptiven Anpassungsproblems des Vue-Mobilterminals

1. Erstellen Sie ein Projekt mit Vue UI 2. Wählen...

Die Funktionen und Unterschiede zwischen deaktiviert und schreibgeschützt

1: schreibgeschützt dient zum Sperren dieses Steue...

Eine Frage zur Einstellung des Randradius-Werts

Problemdatensatz Heute wollte ich ein kleines Bau...

Detaillierte Erklärung der Mixin-Verwendung in Vue

Inhaltsverzeichnis Vorwort 1. Was sind Mixins? 2....

Dockers Mechanismus zur Integritätserkennung

Für Container ist die einfachste Integritätsprüfu...

CSS implementiert problemlos Container auf Blockebene mit festem Verhältnis

Beim Entwerfen eines H5-Layouts werden Sie normal...