Dieser Artikel bietet Ihnen eine Einführung in die Prinzipien von Nginx- und PHP-Ausführungsanfragen. Ich hoffe, dass er Ihnen als Referenz dienen wird.
Lassen Sie uns zunächst die Beziehung zwischen CGI, PHP-CGI, FastCGI und PHP-FPM verstehen, die wir oft hören, und uns helfen, das Funktionsprinzip von PHP zu verstehen
CGI-Protokoll
Das CGI-Protokoll wird verwendet, um den Webserver (z. B. Nginx) zu bestimmen, d. h. welche Daten vom Inhaltsverteilungsserver übergeben werden und welches Datenformat
php-cgi-Prozessinterpreter
php-cgi ist der CGI-Protokollprozessinterpreter von PHP. Bei jedem Start muss die Datei php.ini geladen werden – > -> die Anforderung verarbeiten-> Inhalt an den Webserver zurückgeben-> ;php-cgi-Prozess-Exit-Prozess
Fastcgi-Protokoll
Fastcgi-Protokoll ist ein Ergänzung zur Effizienzverbesserung des CGI-Protokolls, hauptsächlich für jede Anfrage. Es ist nicht mehr erforderlich, die php.ini-Datei jedes Mal neu zu laden und die Ausführungsumgebung zu initialisieren Sobald es eine Webserver-Anfrage empfängt
php-fpm ist die Implementierung des Fastcgi-Protokolls und ein Prozessmanager. Es umfasst Master- und Worker-Prozesse beim Start Der Prozess überwacht den Port und empfängt Anforderungen vom Webserver. Es gibt im Allgemeinen mehrere Worker-Prozesse. Jeder Worker verfügt über einen CGI-Prozessinterpreter, der zum Ausführen von PHP-Code verwendet wird
Beim Start von phpfpm wird der Master-Prozess gestartet, die Datei php.ini geladen und die Ausführungsumgebung initialisiert und mehrere Worker-Prozesse gestartet. Jedes Mal, wenn eine Anfrage eingeht, wird sie zur Verarbeitung an den Arbeitsprozess weitergeleitet
Jedes Mal, nachdem die php.ini-Konfiguration geändert und neu gestartet wurde, wird ein neuer Arbeitsprozess erstellt Ich habe mit dem Laden der neuen Konfiguration begonnen und der zuvor vorhandene Prozess wird nach Abschluss der Arbeit zerstört, sodass ein reibungsloser Neustart erreicht wird.
Wenn Sie das Prinzip verstehen möchten Zusammenarbeit zwischen Nginx und PHP, Sie müssen es zuerst verstehen Der Serverteil in der Nginx-Konfigurationsdatei
server { listen 80; #监听80端口,接收http请求 server_name www.example.com; #一般存放网址,表示配置的哪个项目 root /home/wwwroot/zensmall/public/; # 存放代码的根目录地址或代码启动入口 index index.php index.html; #网站默认首页 #当请求网站的url进行location的前缀匹配且最长匹配字符串是该配置项时,按顺序检查文件是否存在,并返回第一个找到的文件 location / { #try_files,按顺序检查文件是否存在,返回第一个找到的文件 #$uri代表不带请求参数的当前地址 #$query_string代表请求携带的参数 try_files $uri $uri/ /index.php?$query_string; #按顺序检查$uri文件,$uri地址是否存在,如果存在,返回第一个找到的文件;如果都不存在,发起访问/index.php?$query_string的内部请求,该请求会重新匹配到下面的location请求 } #当请求网站的php文件的时候,反向代理到php-fpm去处理 location ~ \.php$ { include fastcgi_params; #引入fastcgi的配置文件 fastcgi_pass 127.0.0.1:9000; #设置php fastcgi进程监听的IP地址和端口 fastcgi_index index.php; #设置首页文件 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #设置脚本文件请求的路径 } }
Die Gesamtbedeutung der obigen Serverkonfiguration ist: Jedes Mal, wenn Nginx eine URL-Anfrage an Port 80 abhört, wird es führt einen Standortabgleich für die URL durch. Wenn die /-Regel übereinstimmt, wird die interne Anfrage umgeleitet und die interne Anfrage von /index.php?$query_string wird initiiert, und die entsprechende Standortkonfigurationsregel sendet die Anfrage an den Masterprozess von php-fpm, der den Port überwacht 9000
Der einfachste Benutzeranfrageprozess ist unten zusammengefasst:
Benutzer greift auf den Domänennamen zu –>Domänenname führt DNS-Auflösung durch –>Anfragen an die entsprechende IP Server und Port->nginx Hören Sie sich die Anfrage des entsprechenden Ports an ->nginx führt einen Standortabgleich für die URL durch -> Führen Sie die Regeln unter dem übereinstimmenden Standort aus ->nginx leitet die Anfrage an php->php-fpm weiter Master-Prozess überwacht die Nginx-Anfrage –>Master-Prozess Weisen Sie die Anfrage einem der inaktiven Worker-Prozesse zu –>Der Worker-Prozess führt die Anfrage aus –>Der Worker-Prozess gibt das Ausführungsergebnis an nginx zurück –>nginx gibt das Ergebnis an zurück der Benutzer
Das obige ist der detaillierte Inhalt vonEinführung in das Prinzip der Ausführung von Anforderungen durch Nginx und PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!