Hoe u afzonderlijke PHP-FPM-pools in NGINX instelt
Gepubliceerd: 15 februari 2025 om 11:52:48 UTC
Laatst bijgewerkt: 12 januari 2026 om 08:30:02 UTC
In dit artikel beschrijf ik de configuratiestappen die nodig zijn om meerdere PHP-FPM-pools te draaien en NGINX via FastCGI met deze pools te verbinden, waardoor processeparatie en -isolatie tussen virtuele hosts mogelijk is.
How to Set Up Separate PHP-FPM Pools in NGINX
De informatie in dit bericht is gebaseerd op NGINX 1.4.6 en PHP-FPM 5.5.9 draaiend op Ubuntu Server 14.04 x64. Het is mogelijk dat deze informatie niet geldig is voor andere versies. (Update: Ik kan bevestigen dat alle instructies in dit bericht nog steeds werken vanaf Ubuntu Server 24.04, PHP-FPM 8.3 en NGINX 1.24.0)
Het opzetten van meerdere PHP-FPM-childprocespools in plaats van alles in één pool te draaien, biedt een aantal voordelen. Beveiliging, scheiding/isolatie en resourcebeheer zijn enkele belangrijke voordelen.
Wat je motivatie ook is, dit bericht helpt je om het te bereiken :-)
Deel 1 – Een nieuwe PHP-FPM-pool instellen
Allereerst moet je de map vinden waar PHP-FPM zijn poolconfiguraties opslaat. Op Ubuntu 14.04 is dit standaard /etc/php5/fpm/pool.d. Waarschijnlijk staat daar al een bestand met de naam www.conf, dat de configuratie voor de standaardpool bevat. Als je dat bestand nog niet eerder hebt bekeken, is het raadzaam om het door te nemen en de instellingen aan te passen aan jouw configuratie, aangezien de standaardinstellingen zijn voor een server met relatief weinig rekenkracht. Maak er voorlopig echter een kopie van, zodat we niet helemaal opnieuw hoeven te beginnen.
Vervang "mypool" natuurlijk door de naam die je aan je zwembad wilt geven.
Open nu het nieuwe bestand met nano of een andere teksteditor naar keuze en pas het aan naar uw wensen. U wilt waarschijnlijk het aantal child-processen aanpassen en mogelijk ook de gebruiker en groep waaronder de pool draait, maar de twee instellingen die u absoluut moet wijzigen, zijn de naam van de pool en de socket waarnaar deze luistert. Anders ontstaat er een conflict met de bestaande pool en werkt het niet meer.
De naam van de pool staat bovenaan het bestand, tussen vierkante haken. Standaard is dit [www]. Wijzig dit naar wat u wilt; ik raad aan om dezelfde naam te gebruiken als voor het configuratiebestand, dus wijzig het voor dit voorbeeld in [mypool]. Als u dit niet wijzigt, lijkt het erop dat PHP-FPM alleen het eerste configuratiebestand met die naam laadt, wat waarschijnlijk problemen zal veroorzaken.
Vervolgens moet u de socket of het adres wijzigen waarnaar u luistert. Dit wordt gedefinieerd door de `listen`-richtlijn. Standaard gebruikt PHP-FPM Unix-sockets, dus uw `listen`-richtlijn zal er waarschijnlijk als volgt uitzien:
Je kunt het wijzigen in elke gewenste geldige naam, maar ik raad aan om een naam te kiezen die lijkt op de naam van het configuratiebestand. Je zou het bijvoorbeeld zo kunnen instellen:
Oké, sla het bestand op en sluit de teksteditor af.
Deel 2 – De NGINX virtuele hostconfiguratie bijwerken
Nu moet je het NGINX virtuele hostbestand openen met de FastCGI-configuratie die je wilt wijzigen naar een nieuwe pool – of liever gezegd, verbinding wilt maken met de nieuwe socket.
Standaard worden deze in Ubuntu 14.04 opgeslagen onder /etc/nginx/sites-available, maar ze kunnen ook elders worden gedefinieerd. U weet waarschijnlijk zelf het beste waar uw virtuele hostconfiguraties zich bevinden ;-)
Open het betreffende configuratiebestand in uw favoriete tekstverwerker en zoek naar de `fastcgi_pass`-richtlijn (die zich in een `location`-context moet bevinden) die de PHP-FPM-socket definieert. U moet deze waarde wijzigen zodat deze overeenkomt met de nieuwe PHP-FPM-poolconfiguratie die u in stap één hebt gemaakt. In ons voorbeeld zou u dit dus als volgt wijzigen:
Fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Sla dat bestand vervolgens ook op en sluit het. Je bent er bijna.
Deel 3 – PHP-FPM en NGINX opnieuw opstarten
Om de door u aangebrachte configuratiewijzigingen toe te passen, moet u zowel PHP-FPM als NGINX opnieuw opstarten. Het kan zijn dat herladen in plaats van herstarten voldoende is, maar ik merk dat dit niet altijd werkt, afhankelijk van welke instellingen zijn gewijzigd. In mijn specifieke geval wilde ik dat de oude PHP-FPM-childprocessen direct werden beëindigd, dus was het nodig om PHP-FPM opnieuw op te starten, maar voor NGINX is herladen mogelijk voldoende. Probeer het zelf uit.
sudo service nginx restart
En voilà, je bent klaar. Als je alles correct hebt gedaan, zou de virtuele host die je hebt aangepast nu de nieuwe PHP-FPM-pool moeten gebruiken en geen child-processen meer moeten delen met andere virtuele hosts.
