Heim Backend-Entwicklung PHP-Tutorial Zusammenfassung des Kommunikationsmechanismus zwischen PHP-FPM und Nginx

Zusammenfassung des Kommunikationsmechanismus zwischen PHP-FPM und Nginx

Jul 15, 2019 pm 01:23 PM
nginx php-fpm

PHP-FPM-Einführung

CGI-Protokoll und FastCGI-Protokoll

Für jede dynamische Sprache (PHP, Python usw.) erforderliche Codedateien. ) Es kann vom Server über den entsprechenden Parser 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 Mechanismus von CGI darin besteht, für jede Anfrage einen CGI-Prozess zu forken und den Prozess dann abzubrechen, nachdem die Anfrage abgeschlossen ist, was in praktischen Anwendungen eine Verschwendung von Ressourcen darstellt, ist eine verbesserte Version von CGI, FastCGI , erschien in der Anfrage Nach der Verarbeitung wird der Prozess nicht abgebrochen, aber mehrere Anfragen werden weiterhin verarbeitet, was die Effizienz erheblich verbessert.

Was ist PHP-FPM?

PHP-FPM ist PHP-FastCGI Process Manager. Es ist die Implementierung von FastCGI und bietet Prozessverwaltungsfunktionen. 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
        |
        |
     等待处理...
Nach dem Login kopieren

Die Kombination von Nginx und PHP-FPM

Unter Linux erfolgt die Kommunikation zwischen Nginx und PHP-FPM auf zwei Arten: TCP-Socket und Unix-Socket.

Der Vorteil des TCP-Sockets besteht darin, dass er serverübergreifend sein kann. 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:

Zusammenfassung des Kommunikationsmechanismus zwischen PHP-FPM und Nginx

Der Unterschied zwischen den beiden:

Seit Unix Socket muss nicht durchlaufen werden Der Netzwerkprotokollstapel muss nicht gepackt und entpackt, Prüfsummen berechnet, Sequenznummern und Antworten verwaltet werden usw. Es werden lediglich Daten der Anwendungsschicht von einem Prozess in einen anderen kopiert. Daher ist seine Effizienz höher als die des TCP-Sockets, 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 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-Socket-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 连接方式
    }

}
Nach dem Login kopieren

 

2) Konfiguration von php-fpm

listen = 127.0.0.1:9000
# 或者下面这样
listen = /var/run/php-fpm.sock
Nach dem Login kopieren

Beachten Sie Folgendes: bei der Verbindung mit der Unix-Socket-Methode, da die Socket-Datei im Wesentlichen eine Datei ist Es liegt ein Problem mit der Berechtigungskontrolle vor. Sie müssen daher auf die Berechtigungen des Nginx-Prozesses und die Berechtigungen von PHP-FPM achten. Andernfalls werden Sie aufgefordert, ohne Berechtigung darauf zuzugreifen. (Benutzer in ihren jeweiligen Konfigurationsdateien festlegen)

Die Kommunikation zwischen PHP-FPM und Nginx kann über die obige Konfiguration abgeschlossen werden.

Auswahl in der Anwendung

Wenn Nginx und PHP-FPM auf demselben Server ausgeführt werden und die Parallelität nicht hoch ist (nicht mehr als 1000), wählen Sie den Unix-Socket aus Verbessern Sie die Kommunikationseffizienz zwischen Nginx und PHP-FPM.

Wenn Sie mit einem hohen gleichzeitigen Geschäft konfrontiert sind, sollten Sie die Verwendung eines zuverlässigeren TCP-Sockets in Betracht ziehen, um die Effizienz durch Betriebs- und Wartungsmethoden wie Lastausgleich und Kerneloptimierung aufrechtzuerhalten.

Wenn die Parallelität hoch ist, Sie aber dennoch den Unix-Socket verwenden möchten, können Sie die Stabilität des Unix-Sockets mit den folgenden Methoden verbessern.

1) Platzieren Sie die Sock-Datei im Verzeichnis /dev/shm, damit der Speicher schneller gelesen und geschrieben werden kann.

2) Erhöhen Sie den Rückstand

Das Standardbit für den Rückstand ist 128, 1024. Dieser Wert wird durch Ihren eigenen normalen QPS ersetzt und die Konfiguration ist wie folgt.

nginx.conf-Datei

server {
        listen 80 default backlog = 1024;
       }
Nach dem Login kopieren

php-fpm.conf-Datei

listen.backlog = 1024
Nach dem Login kopieren

3) Sock-Datei und PHP-FPM-Instanz hinzufügen

Erstellen Sie eine neue Sock-Datei in /dev/shm, verteilen Sie Anforderungen über das Upstream-Modul in Nginx auf zwei Sock-Dateien und ordnen Sie die beiden Sock-Dateien zwei Sätzen von PHP-FPM-Instanzen zu.

Persönliche Zusammenfassung, bitte korrigieren Sie mich, wenn etwas nicht stimmt~

Verwandte Empfehlungen: „PHP-Tutorial

Das obige ist der detaillierte Inhalt vonZusammenfassung des Kommunikationsmechanismus zwischen PHP-FPM und Nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So überprüfen Sie, ob Nginx gestartet wird So überprüfen Sie, ob Nginx gestartet wird Apr 14, 2025 pm 01:03 PM

So bestätigen Sie, ob Nginx gestartet wird: 1. Verwenden Sie die Befehlszeile: SystemCTL Status Nginx (Linux/Unix), Netstat -ano | FindStr 80 (Windows); 2. Überprüfen Sie, ob Port 80 geöffnet ist; 3. Überprüfen Sie die Nginx -Startmeldung im Systemprotokoll. 4. Verwenden Sie Tools von Drittanbietern wie Nagios, Zabbix und Icinga.

So konfigurieren Sie den Namen des Cloud -Server -Domänennamens in Nginx So konfigurieren Sie den Namen des Cloud -Server -Domänennamens in Nginx Apr 14, 2025 pm 12:18 PM

So konfigurieren Sie einen Nginx -Domänennamen auf einem Cloud -Server: Erstellen Sie einen Datensatz, der auf die öffentliche IP -Adresse des Cloud -Servers zeigt. Fügen Sie virtuelle Hostblöcke in die NGINX -Konfigurationsdatei hinzu, wobei der Hörport, Domänenname und das Root -Verzeichnis der Website angegeben werden. Starten Sie Nginx neu, um die Änderungen anzuwenden. Greifen Sie auf die Konfiguration des Domänennamens zu. Weitere Hinweise: Installieren Sie das SSL -Zertifikat, um HTTPS zu aktivieren, sicherzustellen, dass die Firewall den Verkehr von Port 80 ermöglicht, und warten Sie, bis die DNS -Auflösung wirksam wird.

So starten Sie den Nginx -Server So starten Sie den Nginx -Server Apr 14, 2025 pm 12:27 PM

Das Starten eines Nginx-Servers erfordert unterschiedliche Schritte gemäß verschiedenen Betriebssystemen: Linux/UNIX-System: Installieren Sie das NGINX-Paket (z. B. mit APT-Get oder Yum). Verwenden Sie SystemCTL, um einen Nginx -Dienst zu starten (z. B. sudo systemctl start nginx). Windows -System: Laden Sie Windows -Binärdateien herunter und installieren Sie sie. Starten Sie Nginx mit der ausführbaren Datei nginx.exe (z. B. nginx.exe -c conf \ nginx.conf). Unabhängig davon, welches Betriebssystem Sie verwenden, können Sie auf die Server -IP zugreifen

Wie kann ich überprüfen, ob Nginx begonnen wird? Wie kann ich überprüfen, ob Nginx begonnen wird? Apr 14, 2025 pm 12:48 PM

Verwenden Sie unter Linux den folgenden Befehl, um zu überprüfen, ob Nginx gestartet wird: SystemCTL -Status Nginx Richter basierend auf der Befehlsausgabe: Wenn "aktiv: aktiv (lief) angezeigt wird, wird Nginx gestartet. Wenn "Active: Inactive (Dead)" angezeigt wird, wird Nginx gestoppt.

So starten Sie Nginx unter Linux So starten Sie Nginx unter Linux Apr 14, 2025 pm 12:51 PM

Schritte zum Starten von Nginx unter Linux: Überprüfen Sie, ob Nginx installiert ist. Verwenden Sie SystemCTL Start Nginx, um den Nginx -Dienst zu starten. Verwenden Sie SystemCTL aktivieren NGINX, um das automatische Start von NGINX beim Systemstart zu aktivieren. Verwenden Sie den SystemCTL -Status NGINX, um zu überprüfen, ob das Startup erfolgreich ist. Besuchen Sie http: // localhost in einem Webbrowser, um die Standard -Begrüßungsseite anzuzeigen.

So überprüfen Sie die Nginx -Version So überprüfen Sie die Nginx -Version Apr 14, 2025 am 11:57 AM

Die Methoden, die die Nginx -Version abfragen können, sind: Verwenden Sie den Befehl nginx -v; Zeigen Sie die Versionsrichtlinie in der Datei nginx.conf an. Öffnen Sie die Nginx -Fehlerseite und sehen Sie sich den Seitentitel an.

So erstellen Sie einen Spiegel in Docker So erstellen Sie einen Spiegel in Docker Apr 15, 2025 am 11:27 AM

Schritte zum Erstellen eines Docker -Images: Schreiben Sie eine Dockerfile, die die Build -Anweisungen enthält. Erstellen Sie das Bild im Terminal mit dem Befehl Docker Build. Markieren Sie das Bild und weisen Sie Namen und Tags mit dem Befehl Docker Tag zu.

So lösen Sie Nginx403 So lösen Sie Nginx403 Apr 14, 2025 am 10:33 AM

Wie fixiere ich Nginx 403 Verbotener Fehler? Überprüfen Sie die Datei- oder Verzeichnisberechtigungen; 2.Htaccess -Datei prüfen; 3. Überprüfen Sie die Konfigurationsdatei der Nginx; 4. Starten Sie Nginx neu. Weitere mögliche Ursachen sind Firewall -Regeln, Selinux -Einstellungen oder Anwendungsprobleme.

See all articles