Konfiguration von PHP-FPM mit NGINX
Einführung
PHP-FPM (FastCGI Process Manager) ist eine Alternative zur FastCGI-Implementierung von PHP mit zusätzlichen Funktionen, die für Websites mit hohem Datenverkehr nützlich sind. Es ist die bevorzugte Methode zur Verarbeitung von PHP-Seiten mit NGINX und schneller als herkömmliche CGI-basierte Methoden wie SUPHP oder mod_php für die Ausführung eines PHP-Skripts. Der Hauptvorteil von PHP-FPM besteht darin, dass es erheblich weniger Speicher und CPU benötigt als andere Methoden zur Ausführung von PHP. Der Hauptgrund dafür ist, dass PHP demonisiert wird, wodurch es in einen Hintergrundprozess umgewandelt wird, während ein CLI-Skript zur Verwaltung von PHP-Anfragen bereitgestellt wird.
Voraussetzungen für die PHP-FPM NGINX-Konfiguration
- Sie können eine SSH-Sitzung auf Ihrem Ubuntu 18.04-System mit Root- oder einem Benutzer mit Sudo-Rechten öffnen.
- Sie haben NGINX und PHP bereits auf Ihrem Ubuntu 18.04-System installiert.
Schritte zur NGINX PHP-FPM-Konfiguration
1. PHP-FPM installieren
Nginx weiß nicht von selbst, wie ein PHP-Skript ausgeführt wird. Es benötigt ein PHP-Modul wie PHP-FPM, um PHP-Skripte effizient zu verwalten. PHP-FPM läuft hingegen außerhalb der NGINX-Umgebung, indem es einen eigenen Prozess erstellt. Wenn ein Benutzer eine PHP-Seite anfordert, leitet der NGINX-Server die Anfrage über FastCGI an den PHP-FPM-Dienst weiter. Die Installation von PHP-FPM in Ubuntu 18.04 hängt von PHP und seiner Version ab. Überprüfen Sie die Dokumentation der installierten PHP-Version, bevor Sie mit der Installation von FPM auf Ihrem Server fortfahren. Angenommen, Sie haben bereits die neueste PHP-Version 7.3 installiert, dann können Sie FPM mit dem folgenden apt-get-Befehl installieren.
# apt-get install php7.3-fpm
Der FPM-Dienst wird automatisch gestartet, sobald die Installation abgeschlossen ist. Sie können dies mit dem folgenden systemd-Befehl überprüfen:
# systemctl status php7.3-fpm
● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2019-02-17 06:29:31 UTC; 30s ago
Docs: man:php-fpm7.3(8)
Main PID: 32210 (php-fpm7.3)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1152)
CGroup: /system.slice/php7.3-fpm.service
├─32210 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
├─32235 php-fpm: pool www
└─32236 php-fpm: pool www
2. PHP-FPM-Pool konfigurieren
Der php-fpm-Dienst erstellt einen Standardpool, dessen Konfiguration (www.conf) sich im Ordner /etc/php/7.3/fpm/pool.d befindet. Sie können den Standardpool an Ihre Anforderungen anpassen. Es ist jedoch eine gängige Praxis, separate Pools zu erstellen, um die Ressourcenverteilung für jeden FPM-Prozess besser zu kontrollieren. Darüber hinaus ermöglicht die Trennung von FPM-Pools, dass sie unabhängig voneinander durch die Erstellung eines eigenen Masterprozesses arbeiten. Das bedeutet, dass jede PHP-Anwendung mit ihren eigenen Cache-Einstellungen konfiguriert werden kann. Eine Änderung in der Konfiguration eines Pools erfordert nicht das Starten oder Stoppen der anderen FPM-Pools.
3. NGINX für PHP-FPM konfigurieren
Erstellen Sie nun einen NGINX-Serverblock, der den oben genannten FPM-Pool verwendet. Bearbeiten Sie dazu Ihre NGINX-Konfigurationsdatei und geben Sie den Pfad der Socket-Datei des Pools mit der Option fastcgi_pass innerhalb des Location-Blocks für PHP an.
server {
listen 80;
server_name example.journaldev.com;
root /var/www/html/wordpress;
access_log /var/log/nginx/example.journaldev.com-access.log;
error_log /var/log/nginx/example.journaldev.com-error.log error;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php7.2-fpm-wordpress-site.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
4. PHP-FPM NGINX-Konfiguration testen
Um zu testen, ob die obige NGINX-Konfigurationsdatei tatsächlich den neu erstellten FPM-Pool verwendet, erstellen Sie eine phpinfo-Datei im Webroot. Ich habe im obigen NGINX-Server-Block /var/www/html/wordpress als Webroot verwendet. Passen Sie diesen Wert entsprechend Ihrer Umgebung an.
# cd /var/www/html/wordpress
# echo "" > info.php
Sobald Sie die PHP-Info-Seite erstellt haben, öffnen Sie diese in Ihrem bevorzugten Webbrowser. Sie werden feststellen, dass die Werte der Variablen $_SERVER[‚USER‘] und $_SERVER[‚HOME‘] auf wordpress_user bzw. /home/wordpress_user zeigen, wie zuvor in der FPM-Konfigurationsdatei festgelegt. Dies bestätigt, dass NGINX die PHP-Seiten über unseren gewünschten FPM-Pool bedient.
Zusammenfassung
In diesem Artikel haben wir gelernt, wie man PHP-FPM installiert und separate Pools für verschiedene Benutzer und Anwendungen konfiguriert. Wir haben auch gelernt, wie man einen NGINX-Serverblock konfiguriert, um eine Verbindung zu einem PHP-FPM-Dienst herzustellen. PHP-FPM bietet Zuverlässigkeit, Sicherheit, Skalierbarkeit und Geschwindigkeit sowie zahlreiche Optionen zur Leistungsoptimierung. Sie können jetzt den Standard-PHP-FPM-Pool in mehrere Ressourcen-Pools aufteilen, um verschiedene Anwendungen zu bedienen. Dies verbessert nicht nur die Serversicherheit, sondern ermöglicht auch die optimale Zuweisung von Serverressourcen!