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

So mounten Sie eine neue Festplatte auf einem Linux-Cloud-Server

Hintergrund Im Unternehmen wurde ein neuer Server...

MySQL-Parameterbezogene Konzepte und Abfrageänderungsmethoden

Vorwort: In einigen früheren Artikeln haben wir h...

Prozessdiagramm zur Implementierung des CentOS-IP-Verbindungsnetzwerks

1. Melden Sie sich beim System an und geben Sie d...

Analyse des Benchmarking-Prozesses von Sysbench für MySQL

Vorwort 1. Benchmarking ist eine Art Leistungstes...

Vue implementiert eine Countdown-Schaltfläche für den Bestätigungscode

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Erklärung des Befehls mkdir beim Linux-Lernen

Inhaltsverzeichnis Vorwort 1. Grundkenntnisse zu ...

Detaillierte Erklärung der Linux-RPM- und Yum-Befehle und -Verwendung

RPM-Paketverwaltung Ein Verpackungs- und Installa...

So verstehen Sie den Unterschied zwischen ref toRef und toRefs in Vue3

Inhaltsverzeichnis 1. Grundlagen 1.Referenz 2. to...

Methoden und Schritte zum Upgrade von MySql5.x auf MySql8.x

Mehrere Unterschiede zwischen MySQL 5.x und MySQL...

Bringen Sie Ihnen bei, wie Sie den Beobachtermodus in Javascript implementieren

Inhaltsverzeichnis Was ist das Beobachtermuster? ...

So kapseln Sie Timerkomponenten in Vue3

Hintergrund Wenn Sie auf manchen Webseiten von Ei...

Erfahren Sie in 3 Minuten, wie Sie den Supervisor Watchdog verwenden

Software- und Hardwareumgebung centos7.6.1810 64b...