Miklix

Hoe u afzonderlijke PHP-FPM-pools in NGINX instelt

Gepubliceerd: 15 februari 2025 om 11:52:48 UTC

In dit artikel bespreek ik de configuratiestappen die nodig zijn om meerdere PHP-FPM-pools te draaien en NGINX hiermee te verbinden via FastCGI, waardoor scheiding van processen en isolatie tussen virtuele hosts mogelijk wordt.


Deze pagina is machinaal uit het Engels vertaald om hem voor zoveel mogelijk mensen toegankelijk te maken. Helaas is machinevertaling nog geen geperfectioneerde technologie, dus er kunnen fouten optreden. Als je dat liever hebt, kun je hier de originele Engelse versie bekijken:

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 die draaien op Ubuntu Server 14.04 x64. Het kan wel of niet geldig zijn voor andere versies. (Update: Ik kan bevestigen dat vanaf Ubuntu Server 24.04, PHP-FPM 8.3 en NGINX 1.24.0, alle instructies in dit bericht nog steeds werken)

Er zijn een aantal voordelen aan het opzetten van meerdere PHP-FPM child process pools in plaats van alles in dezelfde pool te draaien. Beveiliging, scheiding/isolatie en resource management zijn een paar belangrijke.

Wat je motivatie ook is, dit bericht zal je helpen :-)


Deel 1 – Een nieuwe PHP-FPM-pool opzetten

Eerst moet je de directory vinden waar PHP-FPM zijn poolconfiguraties opslaat. Op Ubuntu 14.04 is dit standaard /etc/php5/fpm/pool.d. Er is waarschijnlijk al een bestand genaamd www.conf , dat de configuratie voor de standaardpool bevat. Als je dat bestand nog niet eerder hebt bekeken, is de kans groot dat je het doorneemt en de instellingen erin aanpast voor je setup, aangezien de standaardinstellingen zijn voor een vrij ondermaatse server, maar maak er voor nu gewoon een kopie van, zodat we niet helemaal opnieuw hoeven te beginnen:

sudo cp www.conf mypool.conf

Vervang natuurlijk “mypool” door de naam die u aan uw pool wilt geven.

Open nu het nieuwe bestand met nano of een andere teksteditor die u verkiest en pas het aan uw doel aan. U zult waarschijnlijk de nummers van het kindproces willen aanpassen en mogelijk onder welke gebruiker en groep 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 zal het conflicteren met de bestaande pool en zullen dingen niet meer werken.

De naam van de pool staat bovenaan het bestand, tussen vierkante haken. Standaard is het [www] . Verander dit naar wat u maar wilt; ik stel voor dat u hetzelfde doet als de naam die u aan het configuratiebestand gaf, dus verander het voor dit voorbeeld naar [mypool] . Als u het niet verandert, lijkt het erop dat PHP-FPM alleen het eerste configuratiebestand met die naam laadt, wat waarschijnlijk tot problemen leidt.

Vervolgens moet u de socket of het adres wijzigen waarnaar u luistert, wat wordt gedefinieerd door de listen -richtlijn. Standaard gebruikt PHP-FPM Unix-sockets, dus uw listen -richtlijn ziet er waarschijnlijk zo uit:

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

U kunt het wijzigen naar elke geldige naam die u wilt, maar nogmaals, ik raad aan om iets te gebruiken dat lijkt op de naam van het configuratiebestand. U kunt het bijvoorbeeld instellen op:

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

Oké, sla het bestand op en sluit de teksteditor.


Deel 2 – NGINX virtuele hostconfiguratie bijwerken

Nu moet u het virtuele hostbestand van NGINX openen met de FastCGI-configuratie die u wilt wijzigen naar een nieuwe pool – of beter gezegd, verbinding wilt maken met de nieuwe socket.

Standaard worden deze op Ubuntu 14.04 opgeslagen onder /etc/nginx/sites-available, maar kunnen ook elders worden gedefinieerd. U weet waarschijnlijk het beste waar uw virtuele hostconfiguraties zich bevinden ;-)

Open het relevante configuratiebestand in uw favoriete teksteditor en zoek naar de fastcgi_pass -richtlijn (die in een locatiecontext moet staan) 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. Als u ons voorbeeld voortzet, wijzigt u dit in:

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

Sla dan ook dat bestand op en sluit het. Je bent nu bijna klaar.


Deel 3 – PHP-FPM en NGINX opnieuw opstarten

Om de configuratiewijzigingen die u hebt aangebracht toe te passen, start u zowel PHP-FPM als NGINX opnieuw op. Het kan voldoende zijn om opnieuw te laden in plaats van opnieuw op te starten , maar ik vind dat een beetje wisselvallig, afhankelijk van welke instellingen worden gewijzigd. In dit specifieke geval wilde ik dat de oude PHP-FPM-kindprocessen meteen zouden sterven, dus was het opnieuw opstarten van PHP-FPM nodig, maar voor NGINX is opnieuw laden mogelijk voldoende. Probeer het zelf.

sudo service php5-fpm restart
sudo service nginx restart

En voila, je bent klaar. Als je alles goed hebt gedaan, zou de virtuele host die je hebt aangepast nu de nieuwe PHP-FPM pool moeten gebruiken en geen child processen moeten delen met andere virtuele hosts.

Delen op BlueskyDelen op FacebookDelen op LinkedInDelen op TumblrDelen op XDelen op LinkedInPin op Pinterest

Mikkel Bang Christensen

Over de auteur

Mikkel Bang Christensen
Mikkel is de bedenker en eigenaar van miklix.com. Hij heeft meer dan 20 jaar ervaring als professioneel computerprogrammeur/softwareontwikkelaar en werkt momenteel fulltime voor een groot Europees IT-bedrijf. Als hij niet blogt, besteedt hij zijn vrije tijd aan een breed scala aan interesses, hobby's en activiteiten, die tot op zekere hoogte weerspiegeld kunnen worden in de verscheidenheid aan onderwerpen op deze website.