Der Inhalt dieses Artikels ist eine Einführung in den Kommunikationsmechanismus zwischen PHP-FPM und Nginx (mit Beispielen). Ich hoffe, dass er für Sie hilfreich ist.
Einführung in PHP-FPM
CGI-Protokoll und FastCGI-Protokoll
Jede dynamische Sprache ( PHP, Python usw.) Codedateien müssen den entsprechenden Parser passieren, damit sie vom Server erkannt werden, und das CGI-Protokoll wird verwendet, um dem Interpreter und dem Server die Kommunikation miteinander zu ermöglichen. Das Parsen von PHP-Dateien auf dem Server erfordert die Verwendung eines PHP-Interpreters in Verbindung mit dem entsprechenden CGI-Protokoll, damit der Server PHP-Dateien analysieren kann.
Da der CGI-Mechanismus jedes Mal, wenn eine Anfrage verarbeitet wird, eine Verzweigung eines CGI-Prozesses und das anschließende Abbrechen des Prozesses nach Abschluss der Anfrage erfordert, stellt dies in praktischen Anwendungen eine Ressourcenverschwendung dar, sodass eine verbesserte Version von CGI, FastCGI ist in der Anforderung enthalten. Nach der Verarbeitung wird der Prozess nicht abgebrochen, sondern es werden weiterhin mehrere Anforderungen verarbeitet, was die Effizienz erheblich verbessert.
Was ist PHP-FPM?
PHP-FPM ist der PHP-FastCGI-Prozessmanager. Er ist die Implementierung von FastCGI und bietet Prozessmanagement Funktion. Der Prozess umfasst zwei Typen: Master-Prozess und Worker-Prozess; es gibt nur einen Master-Prozess, der für das Abhören des Ports und den Empfang von Anforderungen vom Server verantwortlich ist, während es im Allgemeinen mehrere Worker-Prozesse gibt (die spezifische Anzahl wird entsprechend der tatsächlichen konfiguriert). benötigt), und in jedem Prozess ist einer eingebettet. Der PHP-Interpreter ist der Ort, an dem der Code tatsächlich ausgeführt wird.
Nginx- und PHP-FPM-Kommunikationsmechanismus
Wenn wir eine Website (z. B. www.test.com) besuchen, ist der Verarbeitungsablauf wie folgt:
www.test.com | | Nginx | | 路由到www.test.com/index.php | | 加载nginx的fast-cgi模块 | | fast-cgi监听127.0.0.1:9000地址 | | www.test.com/index.php请求到达127.0.0.1:9000 | | 等待处理...
Nginx kombiniert mit PHP-FPM
Unter Linux kommuniziert Nginx mit PHP-FPM über TCP und Unix-Socket.
Der Vorteil von TCP besteht darin, dass es serverübergreifend möglich ist. Diese Methode kann nur verwendet werden, wenn sich Nginx und PHP-fpm nicht auf demselben Computer befinden.
Unix-Socket, auch IPC-Socket (Inter-Process-Communication) genannt, wird verwendet, um die Inter-Prozess-Kommunikation auf demselben Host zu implementieren. Diese Methode erfordert das Ausfüllen des Socket-Dateispeicherorts von php-fpm in der Nginx-Konfiguration Datei. .
Der Datenübertragungsprozess der beiden Methoden ist in der folgenden Abbildung dargestellt:
Der Unterschied zwischen den beiden:
Aufgrund des Unix-Sockets ist es nicht erforderlich, den Netzwerkprotokollstapel, das Packen und Entpacken, das Berechnen von Prüfsummen, das Verwalten von Sequenznummern und Antworten usw. durchzugehen. Es werden lediglich Daten der Anwendungsschicht von einem Prozess zum anderen kopiert. Daher ist seine Effizienz höher als die von TCP, wodurch unnötiger TCP-Overhead reduziert werden kann. Unix-Sockets sind jedoch instabil, wenn die Anzahl der Verbindungen explodiert. Ohne die Unterstützung eines verbindungsorientierten Protokolls können große Datenpakete direkt fehlschlagen, ohne dass ein Fehler auftritt Ausnahme. Verbindungsorientierte Protokolle wie TCP können die Korrektheit und Integrität der Kommunikation besser gewährleisten.
Um Nginx mit PHP-FPM zu kombinieren, müssen Sie nur Einstellungen in den jeweiligen Konfigurationsdateien vornehmen:
1) Konfiguration in Nginx
Nehmen Sie die TCP-Kommunikation als Beispiel
server { listen 80; #监听80端口,接收http请求 server_name www.test.com; #就是网站地址 root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径 #路由到网站根目录www.test.com时候的处理 location / { index index.php; #跳转到www.test.com/index.php autoindex on; } #当请求网站下php文件的时候,反向代理到php-fpm location ~ \.php$ { include /usr/local/etc/nginx/fastcgi.conf; #加载nginx的fastcgi模块 fastcgi_intercept_errors on; fastcgi_pass 127.0.0.1:9000; # tcp 方式,PHP-fpm 监听的IP地址和端口 # fasrcgi_pass /usr/run/php-fpm.sock # unix socket 连接方式 } }
2) Konfiguration von php-fpm
listen = 127.0.0.1:9000 # 或者下面这样 listen = /var/run/php-fpm.sock
Beachten Sie, dass es bei der Verwendung eines Unix-Sockets zum Herstellen einer Verbindung zu Berechtigungskontrollproblemen kommt, da es sich bei der Socket-Datei im Wesentlichen um eine Datei handelt. Daher müssen Sie darauf achten zum Nginx-Prozess Es gibt ein Berechtigungsproblem mit php-fpm, andernfalls wird eine Meldung angezeigt, dass keine Zugriffsberechtigung vorliegt. (Legen Sie Benutzer in den jeweiligen Konfigurationsdateien fest)
Die Kommunikation zwischen PHP-FPM und Nginx kann über die obige Konfiguration abgeschlossen werden.
Das obige ist der detaillierte Inhalt vonEinführung in den Kommunikationsmechanismus zwischen PHP-FPM und Nginx (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!