Miklix

So richten Sie separate PHP-FPM-Pools in NGINX ein

Veröffentlicht: 15. Februar 2025 um 11:49:23 UTC

In diesem Artikel gehe ich die Konfigurationsschritte durch, die erforderlich sind, um mehrere PHP-FPM-Pools auszuführen und NGINX über FastCGI mit ihnen zu verbinden, was eine Prozesstrennung und -isolierung zwischen virtuellen Hosts ermöglicht.


Diese Seite wurde maschinell aus dem Englischen übersetzt, um sie so vielen Menschen wie möglich zugänglich zu machen. Leider ist die maschinelle Übersetzung noch keine ausgereifte Technologie, so dass Fehler auftreten können. Wenn Sie es vorziehen, können Sie sich die englische Originalversion hier ansehen:

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, die auf Ubuntu Server 14.04 x64 ausgeführt werden. Sie können für andere Versionen gültig sein oder nicht. (Update: Ich kann bestätigen, dass ab Ubuntu Server 24.04, PHP-FPM 8.3 und NGINX 1.24.0 alle Anweisungen in diesem Beitrag noch funktionieren.)

Das Einrichten mehrerer PHP-FPM-Unterprozesspools bietet eine Reihe von Vorteilen, anstatt alles im selben Pool auszuführen. Sicherheit, Trennung/Isolation und Ressourcenverwaltung fallen mir als einige der wichtigsten ein.

Egal, 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 Poolkonfigurationen 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 Standardpool enthält. Wenn Sie sich diese Datei noch nicht angesehen haben, sollten Sie sie wahrscheinlich durchgehen und die darin enthaltenen Einstellungen für Ihr Setup anpassen, da die Standardeinstellungen für einen ziemlich leistungsschwachen Server gelten. Erstellen Sie vorerst jedoch einfach eine Kopie davon, damit wir nicht von vorne beginnen müssen:

sudo cp www.conf mypool.conf

Ersetzen Sie „mypool“ natürlich durch den gewünschten Namen Ihres Pools.

Öffnen Sie nun die neue Datei mit nano oder einem beliebigen Texteditor und passen Sie sie Ihren Wünschen entsprechend an. Sie möchten wahrscheinlich die Nummern der untergeordneten Prozesse anpassen und möglicherweise festlegen, unter welchem Benutzer und welcher Gruppe der Pool ausgeführt wird. Die beiden Einstellungen, die Sie unbedingt ändern müssen, sind jedoch der Name des Pools und der Socket, auf den er hört. Andernfalls kommt es zu Konflikten mit dem vorhandenen Pool und die Dinge funktionieren nicht mehr.

Der Name des Pools steht in eckigen Klammern am Anfang der Datei. Standardmäßig ist es [www] . Ändern Sie dies nach Belieben; ich schlage vor, dass Sie denselben Namen verwenden, den Sie der Konfigurationsdatei gegeben haben. Ändern Sie ihn für dieses Beispiel also in [mypool] . Wenn Sie ihn nicht ändern, scheint PHP-FPM nur die erste Konfigurationsdatei mit diesem Namen zu laden, was wahrscheinlich zu Problemen führen wird.

Anschließend müssen Sie den Socket oder die Adresse ändern, auf die Sie hören. Diese wird durch die Listen -Direktive definiert. Standardmäßig verwendet PHP-FPM Unix-Sockets, Ihre Listen -Direktive wird also wahrscheinlich folgendermaßen aussehen:

listen = /var/run/php5-fpm.sock

Sie können ihn in jeden beliebigen gültigen Namen ändern, ich schlage jedoch erneut vor, bei etwas zu bleiben, das dem Konfigurationsdateinamen ähnelt. Sie könnten ihn also beispielsweise wie folgt festlegen:

listen = /var/run/php5-fpm-mypool.sock

Also gut, speichern Sie die Datei und beenden Sie den Texteditor.


Teil 2 – Aktualisieren der NGINX-Konfiguration des virtuellen Hosts

Jetzt müssen Sie die NGINX-Datei des virtuellen Hosts mit der FastCGI-Konfiguration öffnen, die Sie in einen neuen Pool ändern möchten – oder besser gesagt, eine Verbindung zum neuen Socket herstellen.

Standardmäßig werden diese unter Ubuntu 14.04 unter /etc/nginx/sites-available gespeichert, können aber auch anderswo definiert werden. Sie wissen wahrscheinlich am besten, wo sich Ihre virtuellen Hostkonfigurationen befinden ;-)

Öffnen Sie die entsprechende Konfigurationsdatei in Ihrem bevorzugten Texteditor und suchen Sie nach der Direktive fastcgi_pass (die in einem Standortkontext stehen muss), die den PHP-FPM-Socket definiert. Sie müssen diesen Wert ändern, damit er mit der neuen PHP-FPM-Poolkonfiguration übereinstimmt, die Sie in Schritt 1 vorgenommen haben. In unserem Beispiel würden Sie dies also wie folgt ändern:

fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;

Speichern und schließen Sie dann auch diese Datei. Jetzt sind Sie 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. Es kann ausreichen, neu zu laden , anstatt neu zu starten , aber ich finde, dass es ein bisschen Glückssache ist, je nachdem, welche Einstellungen geändert werden. In diesem speziellen Fall wollte ich, dass die alten untergeordneten PHP-FPM-Prozesse sofort beendet werden, also war ein Neustart von PHP-FPM erforderlich, aber für NGINX kann ein Neuladen ausreichen. Probieren Sie es selbst aus.

sudo service php5-fpm restart
sudo service nginx restart

Und voilà, Sie sind fertig. Wenn Sie alles richtig gemacht haben, sollte der von Ihnen geänderte virtuelle Host jetzt den neuen PHP-FPM-Pool verwenden und keine untergeordneten Prozesse mit anderen virtuellen Hosts teilen.

Teilen auf BlueskyAuf Facebook teilenAuf LinkedIn teilenAuf Tumblr teilenTeilen auf XAuf LinkedIn teilenPin auf Pinterest

Mikkel Bang Christensen

Über den Autor

Mikkel Bang Christensen
Mikkel ist der Schöpfer und Eigentümer von miklix.com. Er verfügt über mehr als 20 Jahre Erfahrung als professioneller Computerprogrammierer/Softwareentwickler und ist derzeit in Vollzeit für ein großes europäisches IT-Unternehmen tätig. Wenn er nicht gerade bloggt, verbringt er seine Freizeit mit einer Vielzahl von Interessen, Hobbys und Aktivitäten, was sich bis zu einem gewissen Grad in der Vielfalt der auf dieser Website behandelten Themen widerspiegelt.