So richten Sie separate PHP-FPM-Pools in NGINX ein
Veröffentlicht: 15. Februar 2025 um 11:49:23 UTC
Zuletzt aktualisiert: 12. Januar 2026 um 08:29:54 UTC
In diesem Artikel beschreibe ich die Konfigurationsschritte, die erforderlich sind, um mehrere PHP-FPM-Pools auszuführen und NGINX über FastCGI mit ihnen zu verbinden, wodurch eine Trennung und Isolation der Prozesse zwischen den virtuellen Hosts ermöglicht wird.
How to Set Up Separate PHP-FPM Pools in NGINX
Die Informationen in diesem Beitrag basieren auf NGINX 1.4.6 und PHP-FPM 5.5.9 unter Ubuntu Server 14.04 x64. Sie sind möglicherweise nicht für andere Versionen gültig. (Update: Ich kann bestätigen, dass die Anweisungen in diesem Beitrag auch unter Ubuntu Server 24.04, PHP-FPM 8.3 und NGINX 1.24.0 weiterhin funktionieren.)
Die Einrichtung mehrerer PHP-FPM-Child-Prozesspools bietet gegenüber der Ausführung aller Prozesse in einem einzigen Pool eine Reihe von Vorteilen. Sicherheit, Trennung/Isolation und Ressourcenmanagement sind hierbei einige der wichtigsten.
Ganz gleich, was Ihre Motivation ist, dieser Beitrag wird Ihnen dabei helfen :-)
Teil 1 – Einen neuen PHP-FPM-Pool einrichten
Zuerst müssen Sie das Verzeichnis finden, in dem PHP-FPM seine Pool-Konfigurationen speichert. Unter Ubuntu 14.04 ist dies standardmäßig `/etc/php5/fpm/pool.d`. Dort befindet sich wahrscheinlich bereits eine Datei namens `www.conf`, die die Konfiguration für den Standard-Pool enthält. Falls Sie diese Datei noch nicht gesehen haben, sollten Sie sie überprüfen und die Einstellungen an Ihre Systemkonfiguration anpassen, da die Standardeinstellungen für einen eher leistungsschwachen Server ausgelegt sind. Erstellen Sie aber vorerst einfach eine Kopie, damit wir nicht von vorne beginnen müssen.
Ersetzen Sie natürlich „mypool“ durch den Namen, den Sie für Ihren Pool wünschen.
Öffnen Sie nun die neue Datei mit nano oder einem anderen Texteditor Ihrer Wahl und passen Sie sie Ihren Bedürfnissen an. Wahrscheinlich möchten Sie die Anzahl der Kindprozesse und gegebenenfalls den Benutzer und die Gruppe, unter der der Pool ausgeführt wird, anpassen. Die beiden Einstellungen, die Sie unbedingt ändern müssen, sind der Name des Pools und der Socket, auf dem er lauscht. Andernfalls kommt es zu Konflikten mit dem bestehenden Pool, und die Funktionalität wird beeinträchtigt.
Der Name des Pools steht im oberen Bereich der Datei in eckigen Klammern. Standardmäßig lautet er [www]. Ändern Sie ihn nach Belieben; ich empfehle, ihn genauso zu benennen wie Ihre Konfigurationsdatei, also in diesem Beispiel in [mypool]. Wenn Sie ihn nicht ändern, lädt PHP-FPM anscheinend nur die erste Konfigurationsdatei mit diesem Namen, was wahrscheinlich zu Problemen führt.
Anschließend müssen Sie den Socket oder die Adresse ändern, an der Sie lauschen. Dies wird durch die Listen-Direktive definiert. Standardmäßig verwendet PHP-FPM Unix-Sockets, daher sieht Ihre Listen-Direktive wahrscheinlich so aus:
Sie können den Namen beliebig ändern, aber ich empfehle, einen ähnlichen Namen wie den der Konfigurationsdatei zu verwenden. Sie könnten ihn beispielsweise so festlegen:
Gut, dann speichern Sie die Datei und beenden Sie den Texteditor.
Teil 2 – Aktualisierung der NGINX-Konfiguration für virtuelle Hosts
Nun müssen Sie die NGINX Virtual Host-Datei mit der FastCGI-Konfiguration öffnen, die Sie auf einen neuen Pool ändern möchten – oder besser gesagt, eine Verbindung zum neuen Socket herstellen.
Standardmäßig werden diese unter Ubuntu 14.04 im Verzeichnis `/etc/nginx/sites-available` gespeichert, können aber auch an anderer Stelle definiert werden. Sie wissen wahrscheinlich am besten, wo sich Ihre Virtual-Host-Konfigurationen befinden ;-)
Öffnen Sie die entsprechende Konfigurationsdatei in Ihrem bevorzugten Texteditor und suchen Sie nach der Direktive `fastcgi_pass` (die sich in einem Location-Kontext befinden muss), welche den PHP-FPM-Socket definiert. Sie müssen diesen Wert so ändern, dass er der neuen PHP-FPM-Pool-Konfiguration entspricht, die Sie in Schritt eins vorgenommen haben. In unserem Beispiel würden Sie dies wie folgt ändern:
Fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Speichern und schließen Sie anschließend auch diese Datei. Sie sind fast fertig.
Teil 3 – PHP-FPM und NGINX neu starten
Um die vorgenommenen Konfigurationsänderungen anzuwenden, starten Sie sowohl PHP-FPM als auch NGINX neu. Manchmal reicht ein Neuladen anstelle eines Neustarts aus, aber das ist nicht immer zuverlässig und hängt von den geänderten Einstellungen ab. In meinem Fall wollte ich, dass die alten PHP-FPM-Prozesse sofort beendet werden, daher war ein Neustart von PHP-FPM erforderlich. Für NGINX hingegen kann ein Neuladen genügen. Probieren Sie es am besten selbst aus.
sudo service nginx restart
Und fertig! Wenn Sie alles richtig gemacht haben, sollte der von Ihnen geänderte virtuelle Host nun den neuen PHP-FPM-Pool verwenden und keine Kindprozesse mehr mit anderen virtuellen Hosts teilen.
