Sichere PHP-Ausführung: Professionelle Einrichtung von PHP-FPM mit NGINX
10:13, 19.08.2026
PHP-FPM ist ein Prozessmanager, der für die Bearbeitung von Webanfragen erforderlich ist. Dieser Ansatz ist deutlich schneller als herkömmliche CGI-Methoden wie mod_php oder SUPHP. Der größte Vorteil dieser Methode besteht darin, dass sie weniger CPU-Leistung und Arbeitsspeicher benötigt.
So funktioniert PHP-FPM hinter den Kulissen
Um besser zu verstehen, wie das Ganze funktioniert, werfen wir einen Blick hinter die Kulissen. Hier sind die wichtigsten Schritte der Funktionsweise:
- Bearbeitung der Anfrage. Wenn die Anfrage von einem PHP-Skript beim Server eingeht, wird sie über FastCGI an PHP-FPM weitergeleitet.
- Prozessverwaltung. Nach dem Empfang der Anfrage wählt PHP-FPM einen verfügbaren Prozess aus dem Pool aus, um die Anfrage zu bearbeiten. Falls kein Prozess verfügbar ist, kann ein neuer erstellt werden.
- Es ist möglich, verschiedene Arten von Prozessen zu verwalten, wie z. B. Master- und Worker-Prozesse. Der Master-Prozess ist erforderlich, um auf eingehende Anfragen zu warten und diese an die verfügbaren Worker-Prozesse zu verteilen. Der Worker-Prozess ist für die Ausführung der PHP-Skripte erforderlich. Er kann in verschiedenen Modi arbeiten, z. B. statisch, dynamisch und bedarfsgesteuert.
- Ausführung. Wenn die Anfrage den Worker-Prozess erreicht, wird das PHP-Skript ausgeführt und eine Ausgabe an den Server gesendet.
- Wiederverwendung des Prozesses. Die Worker-Prozesse können nach einer bestimmten Anzahl von Anfragen recycelt werden. Dies ist zur Vermeidung von Speicherlecks erforderlich
Voraussetzungen vor der Konfiguration von PHP-FPM mit NGINX
- Eine SSH-Sitzung auf Ihrem System kann mit dem Benutzer „sudo“ oder dem Root-Benutzer geöffnet werden.
- Installation von PHP und NGINX auf Ihrem System. Falls noch nicht vorhanden, gibt es verschiedene detaillierte Anleitungen zum Installationsprozess.
Schritt-für-Schritt-Anleitung zur Einrichtung von PHP-FPM mit NGINX
- Installation von PHP-FPM
- Einrichtung des PHP-FPM-Pools
- Konfiguration von NGINX für die Verwendung von PHP-FPM
- Überprüfung der Integration von PHP-FPM und NGINX
Schritt 1: Installation von PHP-FPM auf Ihrem Server
Das PHP-Skript konnte unter NGINX nicht ausgeführt werden, da für eine effektive Verwaltung PHP-FPM erforderlich ist. PHP-FPM arbeitet außerhalb von NGINX, indem es einen eigenen Prozess erstellt. Wenn der Benutzer versucht, eine PHP-Seite aufzurufen, leitet der Server diese Anfrage an PHP-FPM weiter.
Der Installationsvorgang unter Ubuntu hängt von der jeweiligen Ubuntu-Version und der PHP-Version ab. Sobald Sie überprüft haben, ob Sie über die neueste PHP-Version verfügen, können Sie den folgenden Befehl für die FPM-Installation verwenden:
sudo apt install -y php8.2-fpm
Nach Ausführung des obigen Befehls startet der Server nach der Installation automatisch. Verwenden Sie zur Überprüfung den folgenden Befehl:
sudo systemctl status php8.2-fpm
Schritt 2: Einrichten des PHP-FPM-Pools
Der Standard-Pool befindet sich im Ordner /etc/php/8.2/fpm/pool.d/ und kann an Ihre Anforderungen angepasst werden. Ein gängigerer Ansatz ist jedoch die Erstellung separater Pools, um eine bessere Kontrolle über jeden einzelnen FPM-Prozess zu erlangen. Jeder Pool verfügt über einen eigenen Master-Prozess, und jede PHP-Anwendung kann mit einem eigenen Cache konfiguriert werden. Dies ist ein recht praktischer Ansatz, da die Pools voneinander getrennt sind und Änderungen an einem Pool keine Auswirkungen auf die anderen haben.
Erstellen wir nun einen FPM-Pool, um die App über einen separaten Benutzer auszuführen. Zunächst erstellen wir einen neuen Benutzer:
# Erstellen einer Systemgruppe namens „wordpress“
sudo groupadd --system wordpress
# Erstellen Sie einen Systembenutzer namens „wordpress“, ordnen Sie ihn der Gruppe „wordpress“ zu und legen Sie keine Login-Shell fest
sudo useradd --system --gid wordpress --shell /usr/sbin/nologin --home-dir /var/www/wordpress wordpress
Im nächsten Schritt wechseln Sie in das Konfigurationsverzeichnis und erstellen mit einem Texteditor eine Konfigurationsdatei:
# cd /etc/php/8.2/fpm/pool.d
# vi wordpress_pool.conf
[wordpress_site]
user = wordpress
group = wordpress
listen = /run/php/php8.2-fpm-wordpress.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
pm = dynamic
pm.max_children = 75
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.process_idle_timeout = 10s
Lassen Sie uns einige der oben genannten Werte näher erläutern:
- [wordpress_site]: Hier sollte ein eindeutiger Name für den Pool angegeben werden.
- Benutzer/Gruppe: Geben Sie an, unter welchem Benutzer oder welcher Gruppe der Pool ausgeführt werden soll.
- Listen: Name der Socket-Datei.
- Listen.owner/group: Muss mit dem Benutzer/der Gruppe von NGINX übereinstimmen.
- Admin_value/flag: Ermöglicht die Einstellung benutzerdefinierter Werte und boolescher Flags.
- pm: Bei Auswahl von „Dynamic“ wird die Anzahl der untergeordneten Prozesse anhand der folgenden Direktiven festgelegt.
- max_children: Die maximale Anzahl an untergeordneten Prozessen, die gleichzeitig aktiv sein können.
- start_servers: Die Anzahl der beim Start erstellten untergeordneten Prozesse.
- max/min_spare_servers: Die maximale und minimale Anzahl von Kindprozessen im Leerlaufzustand.
- idle_timeout: maximale Anzahl inaktiver Serverprozesse.
Außerdem ist es möglich, zwischen statischen und bedarfsgesteuerten Einstellungen zu wählen. Bei der statischen Option gibt es eine feste Anzahl von Prozessen, während bei der bedarfsgesteuerten Option für neue Anfragen weitere Prozesse erstellt werden.
Sobald Sie die Konfigurationsdatei fertiggestellt haben, starten Sie den FPM-Dienst neu:
sudo systemctl restart php8.2-fpm
Schritt 3: Konfiguration von NGINX für die Verwendung von PHP-FPM
Der nächste Schritt ist die Erstellung des NGINX-Serverblocks. Dazu müssen Sie die NGINX-Konfigurationsdatei bearbeiten und den Pfad zur Socket-Datei des Pools über `fastcgi_pass` wie folgt hinzufügen:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php8.2-fpm-wordpress.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
Starten Sie anschließend NGINX neu:
sudo nginx -t
sudo systemctl reload nginx
Schritt 4: Überprüfung der PHP-FPM- und NGINX-Integration
Um zu überprüfen, ob die Konfigurationsdatei tatsächlich den neuen Pool verwendet, muss im Stammverzeichnis eine PHP-Info-Datei erstellt werden.
# Wechseln Sie in das WordPress-Verzeichnis
cd /var/www/html/wordpress
# Erstellen Sie eine PHP-Info-Datei mit sicherer Anführungszeichenverwendung
echo '<?php phpinfo(); ?>' | sudo tee info.php > /dev/null
Sobald die Info-Seite erstellt ist, überprüfen Sie die Werte. Wenn diese mit den Angaben in der FPM-Konfigurationsdatei übereinstimmen, funktioniert alles wie vorgesehen.
Häufige Fragen und Fehlerbehebung
Was ist PHP-FPM und warum sollte man es mit NGINX kombinieren?
PHP-FPM ist ein Prozessmanager, der für die Verwaltung von PHP-Prozessen erforderlich ist. In Kombination mit NGINX kann er die Sicherheit, die Leistung und die Verwaltung der Ressourcen erheblich verbessern.
Wie kann ich NGINX korrekt mit PHP-FPM verknüpfen?
Für die Verknüpfung muss NGINX so konfiguriert werden, dass es PHP-FPM verwendet. Dies geschieht durch Einfügen der Anweisung „fastcgi_pass“ in die Konfigurationsdatei. Dies kann wie folgt erfolgen:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php8.2-fpm-wordpress.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
Wann sollte ich in PHP-FPM einen Socket anstelle eines Ports verwenden?
Die Verwendung von Sockets ermöglicht eine schnellere Kommunikation, da kein Netzwerk-Overhead entsteht. Ein Port erfordert Netzwerkkommunikation, und ein solcher Ansatz ist deutlich langsamer. Dennoch kann die Verwendung von Ports in solchen Fällen sinnvoll sein, in denen FPM auf verschiedenen Containern oder Servern läuft.
Was verursacht einen 502 Bad Gateway-Fehler und wie behebe ich ihn?
Um diesen Fehler zu beheben, ist es entscheidend zu überprüfen, ob FPM läuft und ob TCP oder Socket in der NGINX-Konfiguration korrekt angegeben ist. Überprüfen Sie die FPM-Protokolle auf mögliche Probleme und passen Sie die Pool-Einstellung entsprechend an. Überprüfen Sie außerdem, ob die NGINX-Konfiguration PHP-Anfragen korrekt weiterleitet.
Um die Protokolle zu überprüfen, verwenden Sie den folgenden Befehl:
tail -f /var/log/php8.2-fpm.log
Kann ich mehrere PHP-Versionen in einer NGINX-Konfiguration ausführen?
Ja, dies ist möglich, indem Sie separate Pools konfigurieren und für jede Domain/Subdomain den richtigen Pool angeben. Wenn Sie beispielsweise PHP 7.4 und 7.2 verwenden, ist dies möglich. Legen Sie anschließend für jede Domain den richtigen Pool fest.
Wo finde ich die PHP-FPM-Pool-Einstellungen?
Normalerweise befindet sich der Pool unter /etc/php/8.2/fpm/pool.d/.
Was sind die bewährten Vorgehensweisen zur Steigerung der PHP-FPM-Leistung?
Für eine bessere Leistung müssen Sie möglicherweise die Werte für pm.min_spare_servers, pm.max_children und pm.start_servers in der Konfiguration anpassen. Außerdem können Sie versuchen, „pm.status_path“ und „pm.max_requests“ zu aktivieren.
Abschließende Gedanken
In diesem Artikel haben wir praktisch gezeigt, wie man separate Pools konfiguriert, PHP-FPM installiert, den NGINX-Serverblock konfiguriert und eine Verbindung zum Dienst herstellt. Mit diesem Ansatz lassen sich eine bessere Skalierbarkeit und Sicherheit gewährleisten sowie die Leistungsmerkmale verbessern. Nun wissen Sie, wie Sie Serverressourcen optimal zuweisen können.