Sådan opsætter du separate PHP-FPM-puljer i NGINX
Udgivet: 15. februar 2025 kl. 11.49.19 UTC
Sidst opdateret: 12. januar 2026 kl. 08.29.53 UTC
I denne artikel gennemgår jeg de konfigurationstrin, der er nødvendige for at køre flere PHP-FPM-pools og forbinde NGINX til dem via FastCGI, hvilket muliggør processeparation og isolering mellem virtuelle værter.
How to Set Up Separate PHP-FPM Pools in NGINX
Oplysningerne i dette indlæg er baseret på NGINX 1.4.6 og PHP-FPM 5.5.9, der kører på Ubuntu Server 14.04 x64. Det kan være gyldigt for andre versioner, men det kan være ugyldigt. (Opdatering: Jeg kan bekræfte, at fra og med Ubuntu Server 24.04, PHP-FPM 8.3 og NGINX 1.24.0 fungerer alle instruktionerne i dette indlæg stadig.)
Der er en række fordele ved at opsætte flere PHP-FPM-underprocespuljer i stedet for at køre alt i den samme pulje. Sikkerhed, separation/isolering og ressourcehåndtering er nogle af de vigtigste.
Uanset hvad din motivation er, vil dette indlæg hjælpe dig med at gøre det :-)
Del 1 – Opsæt en ny PHP-FPM-pulje
Først skal du finde den mappe, hvor PHP-FPM gemmer sine poolkonfigurationer. På Ubuntu 14.04 er dette som standard /etc/php5/fpm/pool.d. Der er sandsynligvis allerede en fil der kaldet www.conf, som indeholder konfigurationen for standardpoolen. Hvis du ikke har kigget på den fil før, er der stor sandsynlighed for, at du bør gennemgå den og justere indstillingerne i den til din opsætning, da standardindstillingerne er til en ret underdimensioneret server, men for nu skal du bare lave en kopi af den, så vi ikke behøver at starte forfra:
Selvfølgelig skal du erstatte "minpool" med det, du ønsker, at din pool skal hedde.
Åbn nu den nye fil ved hjælp af nano eller hvilken teksteditor du foretrækker, og juster den, så den passer til dit formål. Du vil sandsynligvis gerne justere numrene på underordnede processer og muligvis hvilken bruger og gruppe puljen kører under, men de to indstillinger, du absolut skal ændre, er puljens navn og den socket, den lytter til, ellers vil den komme i konflikt med den eksisterende pulje, og tingene vil holde op med at virke.
Navnet på poolen er øverst i filen, omgivet af firkantede parenteser. Som standard er det [www]. Skift dette til hvad du vil; jeg foreslår det samme navn, som du gav konfigurationsfilen, så for dette eksempels skyld, skift det til [mypool]. Hvis du ikke ændrer det, ser det ud til, at PHP-FPM kun indlæser den første konfigurationsfil med det navn, hvilket sandsynligvis vil ødelægge det.
Du skal derefter ændre den socket eller adresse, du lytter til, som er defineret af listen-direktivet. Som standard bruger PHP-FPM Unix-sockets, så dit listen-direktiv vil sandsynligvis se sådan ud:
Du kan ændre det til et hvilket som helst gyldigt navn, men igen foreslår jeg, at du holder dig til noget, der ligner konfigurationsfilnavnet, så du kan for eksempel indstille det til:
Okay, gem derefter filen og luk teksteditoren.
Del 2 – Opdater NGINX virtuel værtkonfiguration
Nu skal du åbne NGINX virtuelle værtsfil med den FastCGI-konfiguration, du vil ændre til en ny pool – eller rettere sagt, oprette forbindelse til den nye socket.
Som standard på Ubuntu 14.04 gemmes disse under /etc/nginx/sites-available, men kan også defineres andre steder. Du ved nok bedst, hvor dine virtuelle værtkonfigurationer er placeret ;-)
Åbn den relevante konfigurationsfil i din foretrukne teksteditor, og søg efter fastcgi_pass-direktivet (som skal være i en lokationskontekst), der definerer PHP-FPM-socket'en. Du skal ændre denne værdi, så den matcher den nye PHP-FPM-poolkonfiguration, du lavede under trin et. Hvis du fortsætter med vores eksempel, skal du ændre dette til:
Fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Gem og luk derefter også den fil. Du er næsten færdig nu.
Del 3 – Genstart PHP-FPM og NGINX
For at anvende de konfigurationsændringer, du har foretaget, skal du genstarte både PHP-FPM og NGINX. Det kan være nok at genindlæse i stedet for at genstarte, men jeg synes, det er lidt uoverkommeligt, afhængigt af hvilke indstillinger der ændres. I det specifikke tilfælde ønskede jeg, at de gamle PHP-FPM-underprocesser skulle lukke med det samme, så genstart af PHP-FPM var nødvendig, men for NGINX kan en genindlæsning være tilstrækkelig. Prøv det selv.
sudo service nginx restart
Og voila, du er færdig. Hvis du gjorde alt korrekt, burde den virtuelle vært, du ændrede, nu bruge den nye PHP-FPM-pool og ikke dele underprocesser med andre virtuelle værter.
