So schließen Sie NGINX mit der UNIX- oder TCP/IP-Socket an PHP-FPM an

So schließen Sie NGINX mit der UNIX- oder TCP/IP-Socket an PHP-FPM an

Nginx Webserver (als Reverse Proxy) bedient PHP -Anwendungen über die Fastcgi Protokoll (als Backend Application Server). Nginx beschäftigt PHP-FPM (Fastcgi Process Manager), eine Alternative PHP FASTCGI Implementierung, die im Hintergrund als Dämon ausfällt, zuhören für CGI Anfragen. Es verfügt über zusätzliche Funktionen, die für die Leistung schwerer Websites oder Webanwendungen entwickelt wurden. Es kann jedoch für Websites jeder Größe verwendet werden.

Nicht nur PHP-FPM Unterstützen Sie die Konfiguration von Fastcgi Ressourcenpools, aber es verbessert auch viele der Fastcgi Interna und erhöht die Fehlerberichterstattung, die Kündigung der Skript und vieles mehr. Es verfügt über die Php -Demonisierung, das Prozessmanagement, eine dynamische Anzahl von Prozessen, aus denen Anfragen ausgehen können, Fehlerheader, beschleunigte Upload -Unterstützung und mehr.

Akzeptieren Fastcgi Anfragen von Nginx, PHP-FPM kann entweder auf a zuhören TCP/IP Steckdose oder Unix -Domain -Sockel. Welche Adresse Sie verwenden, die Sie verwenden möchten, was ist was, was ist was Nginx Verwendet, um eine Verbindung herzustellen (Proxy -Anforderungen) an PHP-FPM, Verwendung der fastcgi_pass Richtlinie.

In diesem Handbuch wird erläutert, wie man konfiguriert wird Nginx zu Server -PHP -Anwendungen verwendet PHP-FPM. Es beschreibt, wann ein verwendet werden soll TCP/IP Socket oder UNIX -Domänen -Socket zum Anschließen Nginx Zu PHP-FPM und warum.

Dieser Leitfaden geht davon aus, dass Sie haben Nginx Und PHP-FPM In Ihrem Linux -System installiert, siehe ansonsten:

  • So installieren Sie LEMP Server auf CentOS 8
  • So installieren Sie LEMP Stack phpmyadmin in Ubuntu 20.04 Server
  • So installieren Sie Nginx, MySQL/Mariadb und PHP auf RHEL 8
  • So installieren Sie LEMP auf Debian 10 Server

Was soll ich verwenden: UNIX -Domänen -Socket oder TCP/IP -Socket?

Unix Domain (oder IPC) Sockets sind ein Mittel für die Inter-Process Communication (IPC), mit denen ein effizienter Datenaustausch zwischen Prozessen ermöglicht wird, die auf demselben Betriebssystem ausgeführt werden, während TCP/IP (oder Internet Domäne) Sockeln ermöglichen es Prozessen, über ein Netzwerk zu kommunizieren.

Im Gegensatz zu a TCP/IP Socket, der einen Server nach einer IP -Adresse und einem Port identifiziert (e.G 127.0.0.1: 9000), Sie können einen Server mit einem Dateipfadname an einen UNIX -Domänen -Socket binden (e.G /run/php-fpm/www.Socke), was im Dateisystem sichtbar ist.

Ein UNIX -Domänen -Socket ist ein spezieller Typ der Datei - Datei- und Verzeichnisberechtigungen für sie (wie dies bei jeder anderen Art von Unix -Datei der Fall ist) und kann verwendet werden, um die Prozesse auf dem Host einzuschränken und in die Datei zu schreiben. (und so mit dem Backend -Server kommunizieren).

Auf diese Weise ist eine Unix -Domain -Socket sicher, da nur Prozesse auf dem lokalen Host sie verwenden können. A TCP/IP Socket kann dem Internet ausgesetzt sein und ein Sicherheitsrisiko darstellen, es sei denn, zusätzliche Sicherheitsmaßnahmen wie eine Firewall werden implementiert.

Wichtig ist, a Unix Domain Socket ist nicht dasselbe wie die Verwendung a TCP/IP In Bezug auf Leistung haben sich mehrere Tests und Benchmarks als Unix -Domain -Sockets als schneller erwiesen. Der Hauptnachteil von UNIX-Domänen-Sockets ist, dass sie weniger skalierbar sind. Sie unterstützen nur die Kommunikation zwischen den Prozess innerhalb desselben Betriebssystems (OS).

Wo kann ich PHP-FPM-Listenadresse konfigurieren??

Sie können die Adresse konfigurieren PHP-FPM Hört in einer Ressourcenpool -Konfigurationsdatei auf. Beachten Sie das mit PHP-FPM, Sie können mehrere Prozessepools mit unterschiedlichen Einstellungen ausführen. Der Standardpool heißt www.

Der Speicherort der Ressourcenpool -Konfigurationsdatei hängt vom Weg ab Php Und PHP-FPM werden in einem Linux -System installiert (unabhängig davon, ob es sich um eine Standard-/Einzelversion oder mehrere Versionen handelt gleichzeitig).

Zum Beispiel auf Centos 8, Mit einer einzelnen Version befinden sich alle PHP -Konfigurationsdateien in der /usw Verzeichnis und die Standardeinstellung PHP-FPM Schwimmbad (www) Konfigurationsdatei ist /etc/php-fpm.D/www.Conf:

Verwenden Sie den folgenden LS -Befehl, um alle PHP -Konfigurationsdateien aufzulisten, um den folgenden LS -Befehl zu verwenden.

# ls /etc /php* 
Listen Sie alle PHP -Konfigurationsdateien auf

An Ubuntu 20.04, Die PHP -Konfigurationsdateien befinden sich in der /etc/php // Verzeichnis und die Standardeinstellung PHP-FPM Schwimmbad (www) Konfigurationsdatei ist /etc/php // fpm/Pool.D/www.Conf:

$ ls/etc/php/7.4/ 
Listen Sie alle PHP -Konfigurationsdateien auf Ubuntu auf

Konfigurieren von PHP-FPM, um einen UNIX-Domänenbuchse anzuhören

Konfigurieren PHP-FPM Öffnen Sie Ihre Standardeinstellung, um auf einem Unix -Domain -Socket zuzuhören PHP-FPM Poolkonfigurationsdatei mit Ihrem bevorzugten Texteditor.

$ sudo vim/etc/php/7.4/fpm/Pool.D/www.Conf # Ubuntu/Debian oder # vim/etc/php-fpm.D/www.Conf #Centos/Rhel/Fedora 

Suchen Sie dann nach der Anleitung zur Hören und setzen. Beachten Sie, dass die meisten Installationen standardmäßig einen UNIX -Domänen -Socket verwenden.

Hören =/run/php/php7.4-fpm.Sock #Ubuntu/Debian oder Listen =/run/php-fpm/www.Socken #Centos/Rhel/Fedora 

Wenn Sie einen UNIX -Domänen -Socket verwenden, müssen Sie auch die entsprechenden Lese-/Schreibberechtigungen für die Datei festlegen, um Verbindungen vom NGINX -Webserver zuzulassen. Standardmäßig wird Nginx als Benutzer und Gruppe ausgeführt nginx An Centos/Rhel/Fedora Und www-data An Ubuntu Und Debian.

Also finde die Hören.Eigentümer Und Hören.Gruppe Parameter und setzen Sie sie entsprechend fest. Stellen Sie auch den Modus auf 0660 Verwendung der Hören.Modus Parameter.

------------- Auf Debian und Ubuntu ------------- Hören.Besitzer = www-data hören.Gruppe = www-data hören.Modus = 0660 ------------- Auf Centos/Rhel und Fedora ------------- Hören.Besitzer = nginx hören.Gruppe = nginx hören.Modus = 0660 

Beachten Sie, dass NGINX einen schlechten Gateway -Fehler zurückgeben kann.

PHP-FPM-Konfiguration

Konfigurieren von PHP-FPM zum Anhören auf einem TCP/IP-Socket

Obwohl ein UNIX-Domänen-Socket schneller ist als ein TCP/IP-Socket, ist ersterer weniger skalierbar, da sie nur die Kommunikation zwischen den Prozess unter demselben Betriebssystem unterstützen kann. Wenn Nginx und den Backend Application Server (PHP-FPM) auf verschiedenen Systemen laufen, müssen Sie konfigurieren PHP-FPM So hören Sie auf einer TCP/IP -Socket auf Verbindungen an.

Im PHP-FPM Poolkonfigurationsdatei, festlegen, die Hören Adresse wie folgt. Stellen Sie sicher, dass der von Ihnen gewählte Port nicht von einem anderen Prozess oder Service auf demselben System verwendet wird.

Hören = 127.0.0.1: 3000 
PHP-FPM-Konfiguration für TCP-Socket

Konfigurieren von NGINX so, dass er mit PHP-FPM-Anwendungsserver funktioniert

Sobald Sie die Adresse konfiguriert haben PHP-FPM Hört auf, Sie müssen konfigurieren Nginx Um diese Adresse anzufordern, verwenden Sie die Anfrage fastcgi_pass Konfigurationsparameter in einer virtuellen Server -Block -Konfigurationsdatei.

Wenn beispielsweise die Konfigurationsdatei für Ihre Website ist /etc/nginx/conf.d/Beispiel.com.Conf, Öffnen Sie es zur Bearbeitung.

# vim/etc/nginx/conf.d/Beispiel.com.Conf 

Suche nach Standort Block für die Verarbeitung .Php Dateien und setzen Sie die fastcgi_pass Parameter wie folgt, wenn Sie PHP-FPM so konfiguriert haben, dass sie auf einer UNIX-Domänen-Socket anhören.

FASTCGI_PASS UNIX:/Run/PHP/PHP7.4-fpm.SOCK #UBUNTU/DEBIAN oder FASTCGI_PASS UNIX:/Run/PHP-FPM/WWW.Socken #Centos/Rhel/Fedora 
Schließen Sie Nginx mit UNIX Socket an PHP-FPM an

Oder verwenden a TCP/IP Adresse, wenn Sie konfiguriert werden PHP-FPM auf a zuhören TCP/IP Steckdose. Wenn der Backend Application Server (PHP-FPM) läuft auf einem separaten Server (ersetzen 10.42.0.10 Mit der IP-Adresse des Computers, auf dem der PHP-FPM FastCGI-Server ausgeführt wird).

FASTCGI_PASS 10.42.0.10: 3000; 
Schließen Sie Nginx mit TCP-Socket an PHP-FPM an

Wichtig: An Centos 8, PHP-FPM ist definiert als ein Upstream -Server in der /etc/nginx/conf.D/PHP-FPM.Conf Datei in einem stromaufwärts gelegenen Block mit dem Namen PHP-FPM.

Sie können hier je nach Adresse entsprechend Änderungen vornehmen PHP-FPM ist in der Poolkonfigurationsdatei so konfiguriert, dass sie anhören. Die Standardkonfiguration zeigt auf einen UNIX -Domänenbuchse.

Upstream PHP-FPM Server Unix:/run/php-fpm/www.Socke;  
Konfigurieren Sie den PHP -Upstream -Server in Nginx

und in der Server -Blockdatei Ihrer Website stellen Sie einfach die fest fastcgi_pass Parameter wie gezeigt.

fastcgi_pass php-fpm; 
Konfigurieren Sie Nginx auf PHP-FPM-Upstream-Server

Nachdem Änderungen an der vorgenommen wurden PHP-FPM Und Nginx Konfigurationen überprüfen Sie ihre Konfigurationssyntax auf Korrektheit wie folgt.

------------- Auf Debian und Ubuntu ------------- $ sudo php -fpm -t $ sudo nginx -t ------------- Auf Centos/Rhel und Fedora ------------- # PHP -FPM -T # Nginx -t 

Während die Befehlsausgabe nur die Hauptkonfigurationsdatei anzeigt, werden alle anderen Konfigurationsdateien auch enthalten und überprüft.

Überprüfen Sie die Konfiguration der NGINX und PHP-FPM

Als Nächst.

------------- Auf Debian und Ubuntu ------------- $ sudo systemctl neu starten nginx $ sudo systemctl starten Sie Php7 neu.4-fpm ------------- Auf Centos/Rhel und Fedora ------------- # SystemCTL Neustart Nginx # SystemCTL RESTART PHP-FPM RESTART 

Wenn Sie Fehler erhalten, können Sie das überprüfen Nginx Und PHP-FPM Protokolldateien mit dem CAT -Befehl protokollieren.

------------- Auf Debian und Ubuntu ------------- $ cat/var/log/nginx/fehler.Log $ cat/var/log/php7 log $.4-fpm.Protokoll ------------- Auf Centos/Rhel und Fedora ------------- $ cat/var/log/nginx/fehler.log $ cat/var/log/php-fpm/www-remor.Protokoll 

Das war alles, was wir für dich hatten. Der folgende Kommentarbereich kann verwendet werden, um Fragen zu stellen. Weitere Informationen finden Sie in der Dokumentation NGINX und PHP-FPM-Dokumentation.