NGINX Webserver (als Reverse-Proxy) bedient PHP-Anwendungen über FastCGI Protokoll (als Backend-Anwendungsserver). NGINX verwendet PHP-FPM (FastCGI Process Manager), ein alternatives PHP FastCGI Implementierung, die im Hintergrund als Daemon läuft und auf CGI wartet Anfragen. Es verfügt über zusätzliche Funktionen, die für stark ausgelastete Websites oder Webanwendungen entwickelt wurden, kann jedoch für Websites jeder Größe verwendet werden.
Nicht nur PHP-FPM unterstützt die Konfiguration von FastCGI Ressourcenpools, aber es verbessert auch viele der FastCGI Interna und erhöht die Fehlerberichterstattung, Skriptbeendigung und vieles mehr. Es bietet PHP-Dämonisierung, Prozessverwaltung, dynamische Anzahl von Prozessen, von denen Anfragen kommen können, Fehlerheader, Unterstützung für beschleunigtes Hochladen und mehr.
Um FastCGI zu akzeptieren Anfragen von NGINX , PHP-FPM kann entweder auf einem TCP/IP lauschen Socket oder UNIX-Domain-Socket. Unabhängig davon, welche Adresse Sie verwenden, ist NGINX verwendet, um eine Verbindung (Proxy-Anfragen) zu PHP-FPM herzustellen , mit dem fastcgi_pass
Richtlinie.
In dieser Anleitung wird erklärt, wie Sie NGINX konfigurieren um PHP-Anwendungen mit PHP-FPM zu servern . Es beschreibt, wann ein TCP/IP verwendet werden sollte socket oder UNIX-Domain-Socket, um NGINX zu verbinden zu PHP-FPM und warum.
Diese Anleitung geht davon aus, dass Sie NGINX haben und PHP-FPM auf Ihrem Linux-System installiert, ansonsten siehe:
- So installieren Sie den LEMP-Server auf CentOS 8
- So installieren Sie den LEMP-Stack PhpMyAdmin in Ubuntu 20.04 Server
- So installieren Sie NGINX, MySQL/MariaDB und PHP auf RHEL 8
- Wie man LEMP auf Debian 10 Server installiert
Was sollte ich verwenden:UNIX-Domain-Socket oder TCP/IP-Socket?
UNIX Domain (oder IPC ) Sockets sind ein Mittel der Interprozesskommunikation (IPC), das einen effizienten Datenaustausch zwischen Prozessen ermöglicht, die auf demselben Betriebssystem laufen, während TCP/IP (oder Internetdomäne )-Sockets ermöglichen es Prozessen, über ein Netzwerk zu kommunizieren.
Im Gegensatz zu TCP/IP Socket, der einen Server anhand einer IP-Adresse und eines Ports identifiziert (z. B. 127.0.0.1:9000 ), können Sie einen Server mit einem Dateipfadnamen (z. B. /run/php-fpm/www.sock) an einen UNIX-Domain-Socket binden ), die im Dateisystem sichtbar ist.
Ein UNIX-Domain-Socket ist ein spezieller Dateityp – Datei- und Verzeichnisberechtigungen gelten für ihn (wie bei jedem anderen UNIX-Dateityp) und können verwendet werden, um einzuschränken, welche Prozesse auf dem Host die Datei lesen und in sie schreiben können. (und damit mit dem Backend-Server kommunizieren).
Auf diese Weise ist ein UNIX-Domain-Socket sicher, da nur Prozesse auf dem lokalen Host ihn verwenden können. Ein TCP/IP Socket kann dem Internet ausgesetzt werden und ein Sicherheitsrisiko darstellen, wenn keine zusätzlichen Sicherheitsmaßnahmen wie eine Firewall implementiert werden.
Wichtig ist, dass Sie ein UNIX verwenden Domain-Socket ist nicht dasselbe wie die Verwendung eines TCP/IP socket Hinsichtlich der Leistung haben mehrere Tests und Benchmarks gezeigt, dass UNIX-Domain-Sockets schneller sind. Der Hauptnachteil von UNIX-Domain-Sockets besteht darin, dass sie weniger skalierbar sind und nur die Kommunikation zwischen Prozessen innerhalb desselben Betriebssystems (OS) unterstützen.
Wo kann ich die PHP-FPM-Abhöradresse konfigurieren?
Sie können die Adresse PHP-FPM konfigurieren lauscht in einer Ressourcenpool-Konfigurationsdatei. Beachten Sie dies bei PHP-FPM , können Sie mehrere Pools von Prozessen mit unterschiedlichen Einstellungen ausführen. Der Standardpool heißt www
.
Der Speicherort der Ressourcenpool-Konfigurationsdatei hängt von der Art PHP ab und PHP-FPM auf einem Linux-System installiert sind (unabhängig davon, ob es sich um eine Standard-/Einzelversion oder mehrere Versionen gleichzeitig handelt).
Zum Beispiel auf CentOS 8 , bei einer einzelnen Version befinden sich alle PHP-Konfigurationsdateien im Verzeichnis /etc
Verzeichnis und das standardmäßige PHP-FPM pool (www)
Konfigurationsdatei ist /etc/php-fpm.d/www.conf :
Um alle PHP-Konfigurationsdateien aufzulisten, verwenden Sie den folgenden ls-Befehl.
# ls /etc/php*

Alle PHP-Konfigurationsdateien auflisten
Auf Ubuntu 20.04 , befinden sich die PHP-Konfigurationsdateien im Verzeichnis /etc/php/<php-version>/
Verzeichnis und das standardmäßige PHP-FPM pool (www)
Konfigurationsdatei ist /etc/php/<php-version>/fpm/pool.d/www.conf
:
$ ls /etc/php/7.4/

Alle PHP-Konfigurationsdateien auf Ubuntu auflisten
Konfigurieren von PHP-FPM zum Abhören eines UNIX-Domain-Sockets
So konfigurieren Sie PHP-FPM Um einen UNIX-Domain-Socket abzuhören, öffnen Sie Ihr standardmäßiges PHP-FPM Pool-Konfigurationsdatei mit Ihrem bevorzugten Texteditor.
# vim /etc/php-fpm.d/www.conf #Ubuntu/Debian OR $ sudo vim /etc/php/7.4/fpm/pool.d/www.conf #CentOS/RHEL/Fedora
Suchen Sie dann nach der Direktive listen und setzen Sie sie wie folgt auf den Dateipfadnamen des UNIX-Domain-Sockets. Beachten Sie, dass die meisten Installationen standardmäßig einen UNIX-Domain-Socket verwenden.
listen = /run/php/php7.4-fpm.sock #Ubuntu/Debian OR listen = /run/php-fpm/www.sock #CentOS/RHEL/Fedora
Wenn Sie einen UNIX-Domain-Socket verwenden, müssen Sie auch entsprechende Lese-/Schreibberechtigungen für die Datei festlegen, um Verbindungen vom NGINX-Webserver zuzulassen. Standardmäßig wird NGINX als Benutzer und Gruppe nginx ausgeführt auf CentOS/RHEL/Fedora und www-data auf Ubuntu und Debian .
Suchen Sie also listen.owner
und listen.group
Parameter und stellen Sie sie entsprechend ein. Stellen Sie außerdem den Modus auf 0660 ein mit dem listen.mode
Parameter.
------------- On Debian and Ubuntu ------------- listen.owner = www-data listen.group = www-data listen.mode = 0660 ------------- On CentOS/RHEL and Fedora ------------- listen.owner = nginx listen.group = nginx listen.mode = 0660
Beachten Sie, dass NGINX möglicherweise einen fehlerhaften Gateway-Fehler zurückgibt, wenn die Berechtigungen für die UNIX-Domain-Socket-Datei nicht korrekt festgelegt sind.

PHP-FPM-Konfiguration
Konfigurieren von PHP-FPM zum Abhören eines TCP/IP-Sockets
Obwohl ein UNIX-Domain-Socket schneller ist als ein TCP/IP-Socket, ist ersterer weniger skalierbar, da er die Kommunikation zwischen Prozessen nur auf demselben Betriebssystem unterstützen kann. Wenn NGINX und der Backend-Anwendungsserver (PHP-FPM ) auf unterschiedlichen Systemen laufen, müssen Sie PHP-FPM konfigurieren um auf einem TCP/IP-Socket auf Verbindungen zu lauschen.
Im PHP-FPM pool-Konfigurationsdatei, legen Sie listen
fest Adresse wie folgt. Stellen Sie sicher, dass der von Ihnen gewählte Port nicht von einem anderen Prozess oder Dienst auf demselben System verwendet wird.
listen = 127.0.0.1:3000

PHP-FPM-Konfiguration für TCP-Socket
Konfigurieren von NGINX für die Arbeit mit dem PHP-FPM-Anwendungsserver
Nachdem Sie die Adresse PHP-FPM konfiguriert haben zuhört, müssen Sie NGINX konfigurieren um eine Proxy-Anfrage an ihn über diese Adresse zu senden, indem Sie fastcgi_pass
verwenden Konfigurationsparameter in einer Blockkonfigurationsdatei des virtuellen Servers.
Wenn die Konfigurationsdatei für Ihre Website beispielsweise /etc/nginx/conf.d/example.com.conf ist , zum Bearbeiten öffnen.
# vim /etc/nginx/conf.d/example.com.conf
Suchen Sie nach dem location
Block zur Verarbeitung von .php
Dateien und setzen Sie fastcgi_pass
Parameter wie folgt, wenn Sie PHP-FPM so konfiguriert haben, dass es auf einem UNIX-Domain-Socket lauscht.
fastcgi_pass unix:/run/php/php7.4-fpm.sock #Ubuntu/Debian OR fastcgi_pass unix:/run/php-fpm/www.sock #CentOS/RHEL/Fedora

Verbinden Sie Nginx mit PHP-FPM über Unix Socket
Oder verwenden Sie ein TCP/IP -Adresse, wenn Sie PHP-FPM konfiguriert haben um auf einem TCP/IP zu lauschen Steckdose. Wenn der Back-End-Anwendungsserver (PHP-FPM ) läuft auf einem separaten Server (ersetzen Sie 10.42.0.10 mit der IP-Adresse des Rechners, auf dem der PHP-FPM FastCGI-Server läuft).
fastcgi_pass 10.42.0.10:3000;

Verbinden Sie Nginx über TCP-Socket mit PHP-FPM
Wichtig :Auf CentOS 8 , PHP-FPM ist in /etc/nginx/conf.d/php-fpm.conf als Upstream-Server definiert Datei innerhalb eines Upstream-Blocks mit dem Namen php-fpm .
Je nach Adresse PHP-FPM können Sie hier entsprechende Änderungen vornehmen in der Pool-Konfigurationsdatei zum Abhören konfiguriert ist. Die Standardkonfiguration zeigt auf einen UNIX-Domain-Socket.
upstream php-fpm { server unix:/run/php-fpm/www.sock; }

Konfigurieren Sie den PHP-Upstream-Server in Nginx
und setzen Sie in der Serverblockdatei Ihrer Website einfach den fastcgi_pass
Parameter wie gezeigt.
fastcgi_pass php-fpm;

Konfigurieren Sie Nginx für den PHP-FPM-Upstream-Server
Nach Änderungen am PHP-FPM und NGINX Konfigurationen, überprüfen Sie deren Konfigurationssyntax wie folgt auf Korrektheit.
------------- On Debian and Ubuntu ------------- $ sudo php-fpm -t $ sudo nginx -t ------------- On CentOS/RHEL and Fedora ------------- # php-fpm -t # nginx -t
Während die Befehlsausgabe nur die Hauptkonfigurationsdatei anzeigt, werden alle anderen Konfigurationsdateien eingeschlossen und ebenfalls überprüft.

Überprüfen Sie die Nginx- und PHP-FPM-Konfiguration
Als Nächstes müssen Sie die beiden Dienste mit dem Befehl systemctl neu starten, um die Änderungen zu übernehmen.
------------- On Debian and Ubuntu ------------- $ sudo systemctl restart nginx $ sudo systemctl restart php7.4-fpm ------------- On CentOS/RHEL and Fedora ------------- # systemctl restart nginx # systemctl restart php-fpm
Wenn Sie Fehler erhalten, können Sie in NGINX nachsehen und PHP-FPM log-Dateien mit dem cat-Befehl.
------------- On Debian and Ubuntu ------------- $ cat /var/log/nginx/error.log $ cat /var/log/php7.4-fpm.log ------------- On CentOS/RHEL and Fedora ------------- $ cat /var/log/nginx/error.log $ cat /var/log/php-fpm/www-error.log
Das ist alles, was wir für Sie hatten. Der Kommentarbereich unten kann verwendet werden, um Fragen zu stellen. Weitere Informationen finden Sie in der NGINX-Dokumentation und der PHP-FPM-Dokumentation.
Sharing is Caring…Auf Facebook teilenAuf Twitter teilenAuf Linkedin teilenAuf Reddit teilen