PHP FastCGI Process Manager – PHP-FPM
PHP ist eine der am häufigsten verwendeten Programmiersprachen für die Webentwicklung. Wenn es darum geht, große Datenmengen effizient zu verarbeiten, kann sich die Leistung von PHP erheblich auf die Gesamtgeschwindigkeit und Reaktionsfähigkeit von Websites auswirken. An dieser Stelle kommt der PHP FastCGI Process Manager (PHP-FPM) ins Spiel. PHP-FPM ist ein weit verbreiteter alternativer PHP-Handler, der eine leistungsstarke Methode zur Ausführung von PHP-Skripten bietet.
In diesem Artikel erfahren Sie, was PHP-FPM ist, warum es für die Optimierung der Webserver-Performance wichtig ist und wie Sie es für Ihre PHP-basierten Anwendungen konfigurieren.
Was ist PHP-FPM?
PHP-FPM, oder PHP FastCGI Process Manager, ist eine Implementierung von FastCGI für PHP-Skripte. FastCGI ist ein Protokoll, das die Leistung von Webservern verbessert, indem es Anfragen effizienter bearbeitet als das Standard-CGI (Common Gateway Interface). Während CGI für jede Anfrage einen neuen Prozess erstellt (was zu einem hohen Ressourcenverbrauch führt), hält FastCGI einen Pool von Arbeitsprozessen bereit, um mehrere Anfragen zu bearbeiten und so den Overhead zu reduzieren.
PHP-FPM fügt eine Prozessverwaltungsschicht auf FastCGI hinzu, die Funktionen wie Prozess-Pooling, On-Demand-Spawning von Workern, Graceful Shutdown und die Fähigkeit, Umgebungen mit hohem Datenverkehr problemlos zu bewältigen, ermöglicht. Es ist jetzt der De-facto-Standard-PHP-Handler für viele moderne Webserver, einschließlich NGINX und Apache.
Warum PHP-FPM verwenden?
- Verbesserte Leistung: PHP-FPM kann mehr gleichzeitige Anfragen mit weniger Ressourcen bewältigen, wodurch die Serverlast verringert und die Antwortzeiten beschleunigt werden. Dies ist besonders vorteilhaft für Websites mit hohem Datenverkehr oder Anwendungen, bei denen es zu plötzlichen Spitzen im Datenverkehr kommt.
- Prozess-Management: PHP-FPM ermöglicht ein fein abgestimmtes Prozessmanagement und gibt Ihnen die Kontrolle darüber, wie PHP Anfragen bearbeitet. Es verwendet einen Pool von Workern, der an die zu erwartende Arbeitslast angepasst werden kann und eine effiziente Nutzung der Serverressourcen gewährleistet.
- Bessere Ressourcenauslastung: Da PHP-FPM Prozesse in einem Pool zusammenfasst, können mehrere Anfragen mit denselben Workern bearbeitet werden, wodurch die Notwendigkeit, ständig Prozesse zu erstellen und zu beenden, minimiert wird. Dies verbessert die Speichernutzung und die CPU-Effizienz.
- Ordnungsgemäße Degradierung: Wenn PHP-FPM richtig konfiguriert ist, kann es die Anzahl der aktiven Prozesse reduzieren, wenn der Server überlastet ist, und so einen kompletten Absturz verhindern.
- Erweiterte Funktionen: PHP-FPM enthält erweiterte Funktionen wie Slow-Log für die Fehlersuche, adaptives Prozess-Spawning und Statusberichte, die einen Einblick in die Leistung und den Zustand Ihrer PHP-Anwendungen geben.
Hauptmerkmale von PHP-FPM
- Prozess-Pools: Mit PHP-FPM können Sie mehrere Pools von PHP-Arbeitsprozessen definieren. Jeder Pool kann mit unterschiedlichen Einstellungen konfiguriert werden, so dass Sie verschiedene PHP-Anwendungen mit unterschiedlichen Anforderungen an den Datenverkehr auf demselben Server ausführen können.
- Adaptives Prozess-Spawning: PHP-FPM kann die Anzahl der Worker-Prozesse automatisch an das Verkehrsaufkommen anpassen. Es beginnt mit einer Mindestanzahl von Workern und kann die Poolgröße bei Bedarf erhöhen, ohne dass in Zeiten mit geringem Datenverkehr Ressourcen verschwendet werden.
- Langsames Protokoll: Die Slow-Log-Funktion in PHP-FPM zeichnet Anfragen auf, die eine vordefinierte Ausführungszeit überschreiten. Dies hilft Entwicklern, Leistungsengpässe in ihrem PHP-Code zu erkennen und zu beheben.
- Statusseite: PHP-FPM bietet eine integrierte Statusseite, die in Echtzeit Informationen über den Pool-Status, aktive Worker, Idle-Worker und andere Metriken zur Leistungsüberwachung liefert.
- Sanftes Herunterfahren: PHP-FPM kann Prozesse sanft beenden, so dass laufende Anfragen abgeschlossen werden können, bevor das System heruntergefahren wird. Dadurch wird eine abrupte Beendigung laufender Skripte verhindert und eine bessere Benutzerfreundlichkeit gewährleistet.
Wie funktioniert PHP-FPM?
PHP-FPM arbeitet als eigenständiger FastCGI-Server, der in einen Webserver wie NGINX oder Apache integriert ist, um PHP-Skripte bereitzustellen. Wenn eine Anfrage eingeht, leitet der Webserver die PHP-Anfrage an den PHP-FPM-Dienst weiter, der einen Pool von Worker-Prozessen verwaltet, die den PHP-Code ausführen und das Ergebnis an den Webserver zurücksenden, damit es an den Client übermittelt wird.
Hier sehen Sie einen vereinfachten Ablauf, wie PHP-FPM eine Anfrage bearbeitet:
- Client-Anfrage: Ein Benutzer fordert eine Webseite an, die PHP-Code enthält.
- Webserver empfängt die Anfrage: Der Webserver (NGINX oder Apache) empfängt die Anfrage und leitet sie über das FastCGI-Protokoll an den PHP-FPM-Dienst weiter.
- PHP-FPM-Worker verarbeitet die Anfrage: Einer der Worker-Prozesse im PHP-FPM-Pool bearbeitet die Anfrage, führt das PHP-Skript aus und gibt die Ausgabe zurück.
- Antwort wird zurückgesendet: Der Webserver empfängt die Ausgabe und sendet sie als fertig gerendertes HTML an den Client zurück.
Einrichten und Konfigurieren von PHP-FPM
Schritt 1: Installation von PHP-FPM
Für die meisten Linux-Distributionen kann PHP-FPM über den Paketmanager installiert werden. Hier sind die Befehle für gängige Systeme:
# Für Debian/Ubuntu
sudo apt update
sudo apt install php-fpm
# Für CentOS/RHEL
sudo yum install php-fpm
Nach der Installation können Sie den PHP-FPM-Dienst starten:
sudo systemctl start php-fpm
Schritt 2: PHP-FPM-Pools konfigurieren
Die Hauptkonfigurationsdatei für PHP-FPM befindet sich normalerweise in /etc/php/7.x/fpm/pool.d/ oder /etc/php-fpm.d/ , abhängig von Ihrer Distribution und PHP-Version. Jeder Pool wird in einer eigenen Datei definiert, die normalerweise nach der Website oder Anwendung benannt ist, die er bedient. Hier ist eine Beispielkonfiguration für einen Pool:
[www]
benutzer = www-data
gruppe = www-data
lauschen = /run/php/php7.4-fpm.sock
listen.besitzer = www-data
listen.gruppe = www-data
pm = dynamisch
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500
- pm = dynamisch: Der Prozessmanager kann die Anzahl der Arbeitsprozesse dynamisch an den Bedarf anpassen.
- pm.max_children: Die maximale Anzahl von Arbeitsprozessen, die zur Bearbeitung von Anfragen erzeugt werden können.
- pm.start_servers: Die Anzahl der Worker-Prozesse, die gestartet werden, wenn PHP-FPM gestartet wird.
- pm.min_spare_servers und pm.max_spare_servers: Definieren die minimale und maximale Anzahl von Workern im Leerlauf, damit PHP-FPM die Ressourcen je nach Auslastung skalieren kann.
- pm.max_requests: Die maximale Anzahl von Anfragen, die ein Worker bearbeiten kann, bevor er beendet und ersetzt wird. Dies hilft, Speicherlecks in langlaufenden Skripten zu vermeiden.
Schritt 3: Webserver für die Verwendung von PHP-FPM konfigurieren
Für NGINX:
Richten Sie in Ihrer NGINX-Konfigurationsdatei (z. B. /etc/nginx/sites-available/example.com) PHP-FPM als PHP-Handler ein:
server {
listen 80;
server_name example.com;
root /var/www/html;
standort / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
einschließen snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
}
Um PHP-FPM in Apache zu aktivieren, stellen Sie sicher, dass das Modul mod_proxy_fcgi aktiviert ist:
sudo a2enmod proxy_fcgi setenvif
Aktualisieren Sie dann die Konfiguration Ihres virtuellen Apache-Hosts:
ServerName beispiel.com
DokumentRoot /var/www/htmlSetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
Schritt 4: Testen der Konfiguration
Nachdem Sie PHP-FPM und Ihren Webserver konfiguriert haben, starten Sie die Dienste neu, um die Änderungen zu übernehmen:
# Für NGINX
sudo systemctl restart nginx
# Für Apache
sudo systemctl neustart apache2
Um zu überprüfen, ob PHP-FPM funktioniert, erstellen Sie eine Datei phpinfo.php in Ihrem Web-Root-Verzeichnis:
?php
phpinfo();
?>
Rufen Sie die Datei in Ihrem Browser auf (z. B. http://example. com/phpinfo.php), um zu sehen, ob PHP-FPM als Handler aufgeführt ist.
Schlussfolgerung
PHP-FPM ist ein unverzichtbares Werkzeug zur Optimierung der PHP-Leistung, insbesondere für Websites mit hohem Datenverkehr. Es bietet erhebliche Vorteile gegenüber herkömmlichen PHP-Handlern, indem es Prozesse effizient verwaltet, die Auslastung der Serverressourcen verbessert und fortschrittliche Funktionen wie adaptive Prozessskalierung und Slow Logging bietet. Indem Sie PHP-FPM für Ihre speziellen Anforderungen konfigurieren, können Sie sicherstellen, dass Ihre PHP-Anwendungen auch bei hoher Last reibungslos und effizient laufen.
Wenn Sie die Schritte in diesem Leitfaden befolgen, sollten Sie auf dem besten Weg sein, PHP-FPM für Ihre PHP-basierten Projekte einzurichten und zu optimieren.