Heim  >  Artikel  >  Backend-Entwicklung  >  Sollten wir für die Kommunikation zwischen Nginx und PHP-FPM Unix-Socket oder TCP verwenden?

Sollten wir für die Kommunikation zwischen Nginx und PHP-FPM Unix-Socket oder TCP verwenden?

藏色散人
藏色散人nach vorne
2019-12-31 13:28:344660Durchsuche

Vorwort

Es gibt zwei Kommunikationsmethoden zwischen Nginx und Fastcgi, eine ist die TCP-Methode und die andere ist die Unix-Socket-Methode. Beide Methoden haben ihre eigenen Vor- und Nachteile. Hier werden zunächst zwei Konfigurationsmethoden vorgestellt und dann die Leistung, Sicherheit usw. zusammengefasst.

TCP verwendet den TCP-Port, um eine Verbindung herzustellen 127.0.0.1:9000

Socket verwendet einen Unix-Domänen-Socket, um eine Verbindung zum Socket /dev/shm/PHP-cgi.sock herzustellen (viele Tutorials verwenden den Pfad /tmp , und der Pfad /dev/shm ist tmpfs, was viel schneller ist als die Festplatte. Wenn der Serverdruck nicht hoch ist, gibt es keinen großen Unterschied zwischen TCP und Socket, aber wenn der Druck relativ hoch ist, hat die Socket-Methode einen großen Unterschied ein echter Effekt.

Konfigurationsanleitung

1. TCP-Konfigurationsmethode

Die TCP-Kommunikationskonfiguration ist sehr einfach und kann in drei Schritten durchgeführt werden

Erster Schritt: Bearbeiten Sie /etc/nginx/conf.d/Ihre Site-Konfigurationsdatei (wenn Sie die Standardkonfigurationsdatei verwenden, ändern Sie /etc/nginx/sites-available/default)

Ändern Setzen Sie den Parameter fastcgi_pass auf 127.0.0.1:9000, etwa so:

location ~ \.php$ {
      index index.php index.html index.htm;
      include /etc/nginx/fastcgi_params;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fastcgi_params;
 }

Der zweite Schritt besteht darin, die PHP-FPM-Konfigurationsdatei /etc/php5/fpm/pool.d/www.conf

Ändern Sie den Listen-Parameter wie folgt auf 127.0.0.1:9000:

listen=127.0.0.1:9000

Der dritte Schritt: PHP-FPM neu starten, Nginx neu starten

2. Unix-Socket-Konfigurationsmethode

Unix-Socket sollte eigentlich als Unix-Domain-Socket bezeichnet werden. Es handelt sich um eine weit verbreitete Methode der Interprozesskommunikation (IPC), in der Dateien (normalerweise .sock) verwendet werden Als einziger Socket-Bezeichner (Deskriptor) können zwei Prozesse, die kommunizieren müssen, einen Kommunikationskanal einrichten, indem sie auf dieselbe Socket-Deskriptordatei verweisen.

Unix-Domain-Socket oder IPC-Socket ist ein Terminal, das es zwei oder mehr Prozessen auf demselben Betriebssystem ermöglicht, Daten zu kommunizieren. Im Gegensatz zu Pipes können Unix-Domänen-Sockets sowohl Byteströme als auch Datenwarteschlangen verwenden, während die Pipe-Kommunikation nur über Byteströme erfolgen kann. Die Schnittstelle von Unix-Domänen-Sockets ist der von Internet-Sockets sehr ähnlich, verwendet jedoch nicht das zugrunde liegende Netzwerkprotokoll für die Kommunikation. Die Funktion des Unix-Domain-Sockets ist Bestandteil des POSIX-Betriebssystems. Unix-Domänensockets verwenden die Adresse einer Systemdatei als ihre Identität. Es kann von Systemprozessen referenziert werden. So können zwei Prozesse gleichzeitig einen Unix-Domänen-Socket öffnen, um zu kommunizieren. Diese Kommunikationsmethode findet jedoch im Systemkern statt und verbreitet sich nicht im Netzwerk.

Die Konfiguration erfordert fünf Schritte

Der erste Schritt besteht darin, den Speicherort Ihrer Socket-Deskriptordatei zu bestimmen.

kann an einer beliebigen Stelle im System abgelegt werden. Wenn Sie eine schnellere Kommunikationsgeschwindigkeit wünschen, können Sie es unter /dev/shm ablegen, einem Bereich, der direkt von verwendet werden kann RAM. Daher ist die Lesegeschwindigkeit sehr hoch.

Nachdem Sie den Dateispeicherort festgelegt haben, müssen Sie die Berechtigungen der Datei für Nginx und PHP-FPM ändern. Sie können Folgendes tun:

sudo touch /dev/shm/fpm-cgi.sock
sudo chown www-data:www-data /dev/shm/fpm-cgi.sock
sudo chmod 666 /dev/shm/fpm-cgi.sock

Der zweite Der Schritt besteht darin, die PHP-FPM-Konfigurationsdatei /etc/php5/fpm/pool.d/www.conf zu ändern.

Ändern Sie den Listen-Parameter in /dev/shm/fpm-cgi.sock, etwa so:

listen=/dev/shm/fpm-cgi.sock

Ändern Sie den Parameter listen.backlog auf -1. Der Standardwert ist 128. Wenn die Parallelität hoch ist, wird ein Fehler gemeldet

 ; Set listen(2) backlog. A value of '-1' means unlimited.
 ; Default Value: 128 (-1 on FreeBSD and OpenBSD)
 listen.backlog = -1

Der dritte Schritt ist die Änderung die Nginx-Site-Konfigurationsdatei

Ändern Sie den Parameter fastcgi_pass in unix:/dev/shm/fpm-cgi.sock, wie folgt:

location~\.php${
      indexindex.phpindex.htmlindex.htm;
      include/etc/nginx/fastcgi_params;
      fastcgi_passunix:/dev/shm/fpm-cgi.sock;
      fastcgi_indexindex.php;
      includefastcgi_params;
}

Der vierte Schritt besteht darin, /etc/sysctl zu ändern .conf-Datei, um die Anzahl gleichzeitiger Verbindungen auf Kernel-Ebene zu erhöhen

sudo echo'net.core.somaxconn = 2048'>>/etc/sysctl.conf
sudo sysctl-p

Der fünfte Schritt: Starten Sie die Nginx- und PHP-FPM-Dienste neu (am besten starten Sie zuerst PHP-FPM und dann NginX neu)

ps: Wenn Nginx den Lastausgleich durchführt, denken Sie überhaupt nicht an einen Unix-Socket. Die einzige Möglichkeit ist die Verwendung von TCP.

Weitere PHP-Kenntnisse finden Sie im

PHP-Tutorial!

Das obige ist der detaillierte Inhalt vonSollten wir für die Kommunikation zwischen Nginx und PHP-FPM Unix-Socket oder TCP verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:lukachen.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen