PHP FastCGI-Prozess-Verwaltung – PHP-FPM
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 dazu dient, die Leistung von Webservern zu verbessern, indem Anfragen effizienter bearbeitet werden als mit dem Standard-CGI (Common Gateway Interface). Während CGI für jede Anfrage einen neuen Prozess erzeugt (was zu einem hohen Ressourcenverbrauch führt), hält FastCGI einen Pool von Worker-Prozessen bereit, um mehrere Anfragen zu bearbeiten und so den Overhead zu reduzieren. PHP-FPM fügt eine Prozessverwaltungsschicht über 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. PHP-FPM ist heute der De-facto-Standard für viele moderne Webserver, darunter 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 verkürzt werden. Dies ist besonders vorteilhaft für stark frequentierte Websites 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 sie heruntergefahren werden. 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 dem Client zur Verfügung gestellt werden kann. Hier ein vereinfachter 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: Installieren von PHP-FPM
Für die meisten Linux-Distributionen kann PHP-FPM über Paketmanager installiert werden. Hier sind die Befehle für gängige Systeme:
# For Debian/Ubuntu
sudo apt update
sudo apt install php-fpm
# For CentOS/RHEL
sudo yum install php-fpm
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]
user = www-data
group = www-data
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
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 Worker-Prozessen, 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: Konfigurieren des Webservers für die Verwendung von PHP-FPM
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;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include 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 Ihre Apache Virtual Host Konfiguration
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
<FilesMatch .php$>
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
Schritt 4: Testen der Konfiguration
Nachdem Sie PHP-FPM und Ihren Webserver konfiguriert haben, starten Sie die Dienste neu, um die Änderungen zu übernehmen:
# For NGINX
sudo systemctl restart nginx
# For Apache
sudo systemctl restart apache2
?php
phpinfo();
?>
Schlussfolgerung: Supercharge PHP mit AlexHost und PHP-FPM
PHP-FPM verwandelt Ihre PHP-Anwendungen in Hochleistungsmaschinen, und der NVMe-gestützte VPS von AlexHost sorgt dafür, dass sie auch unter hoher Last reibungslos laufen. Installieren Sie PHP-FPM, konfigurieren Sie Pools und integrieren Sie es mit NGINX oder Apache für schnelle, sichere Websites. Überwachen Sie mit Statusseiten, debuggen Sie mit langsamen Protokollen und sichern Sie Ihre Konfigurationen zur Sicherheit. Mit dem Root-Zugang und dem Support von AlexHost sind Ihre PHP-Projekte nicht mehr aufzuhalten – fangen Sie an zu programmieren und skalieren Sie mühelos!