Hvordan sette opp separate PHP-FPM-pooler i NGINX
Publisert: 15. februar 2025 kl. 11:52:46 UTC
Sist oppdatert: 12. januar 2026 kl. 08:30:02 UTC
I denne artikkelen går jeg gjennom konfigurasjonstrinnene som trengs for å kjøre flere PHP-FPM-bassenger og koble NGINX til dem via FastCGI, noe som muliggjør prosessseparasjon og isolering mellom virtuelle verter.
How to Set Up Separate PHP-FPM Pools in NGINX
Informasjonen i dette innlegget er basert på NGINX 1.4.6 og PHP-FPM 5.5.9 som kjører på Ubuntu Server 14.04 x64. Den kan være gyldig for andre versjoner, men ikke nødvendigvis. (Oppdatering: Jeg kan bekrefte at fra og med Ubuntu Server 24.04, PHP-FPM 8.3 og NGINX 1.24.0 fungerer alle instruksjonene i dette innlegget fortsatt.)
Det er en rekke fordeler med å sette opp flere PHP-FPM-underprosessbassenger i stedet for å kjøre alt i samme pool. Sikkerhet, separasjon/isolering og ressurshåndtering er noen av de viktigste.
Uansett hva motivasjonen din er, vil dette innlegget hjelpe deg med å gjøre det :-)
Del 1 – Sett opp et nytt PHP-FPM-basseng
Først må du finne mappen der PHP-FPM lagrer pool-konfigurasjonene sine. På Ubuntu 14.04 er dette /etc/php5/fpm/pool.d som standard. Det finnes sannsynligvis allerede en fil der som heter www.conf, som inneholder konfigurasjonen for standard pool. Hvis du ikke har sett på den filen før, er det sannsynlig at du bør gå gjennom den og justere innstillingene i den for oppsettet ditt, siden standardinnstillingene er for en server med ganske lav kapasitet, men foreløpig er det bare å lage en kopi av den, slik at vi ikke trenger å starte på nytt:
Selvfølgelig, erstatt «mittbasseng» med hva du vil at bassenget ditt skal hete.
Åpne nå den nye filen med nano eller hvilken teksteditor du foretrekker, og juster den slik at den passer til formålet. Du vil sannsynligvis ønske å justere barneprosessnumrene og muligens hvilken bruker og gruppe poolen kjører under, men de to innstillingene du absolutt må endre er poolens navn og socketen den lytter til, ellers vil den komme i konflikt med den eksisterende poolen, og ting vil slutte å fungere.
Navnet på poolen står nær toppen av filen, omsluttet av hakeparenteser. Som standard er det [www]. Endre dette til hva du vil; jeg foreslår det samme som du ga konfigurasjonsfilen navnet, så for dette eksempelets skyld endre det til [mypool]. Hvis du ikke endrer det, ser det ut til at PHP-FPM bare laster inn den første konfigurasjonsfilen med det navnet, noe som sannsynligvis vil ødelegge ting.
Deretter må du endre socketen eller adressen du lytter til, som er definert av listen-direktivet. Som standard bruker PHP-FPM Unix-sockets, så listen-direktivet ditt vil sannsynligvis se slik ut:
Du kan endre det til hvilket som helst gyldig navn du ønsker, men igjen foreslår jeg at du holder deg til noe som ligner på konfigurasjonsfilnavnet, slik at du for eksempel kan sette det til:
Greit, lagre filen og avslutt tekstredigeringsprogrammet.
Del 2 – Oppdater konfigurasjonen av NGINX virtuell vert
Nå må du åpne den virtuelle NGINX-vertsfilen med FastCGI-konfigurasjonen du vil endre til et nytt basseng – eller rettere sagt, koble til den nye sokkelen.
Som standard på Ubuntu 14.04 lagres disse under /etc/nginx/sites-available, men kan også defineres andre steder. Du vet sannsynligvis best hvor konfigurasjonene for virtuelle verter befinner seg ;-)
Åpne den relevante konfigurasjonsfilen i din favoritt teksteditor og se etter fastcgi_pass-direktivet (som må være i en lokasjonskontekst) som definerer PHP-FPM-socketen. Du må endre denne verdien slik at den samsvarer med den nye PHP-FPM-poolkonfigurasjonen du lagde i trinn én, så hvis du fortsetter med eksemplet vårt, endrer du dette til:
Fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Lagre og lukk deretter den filen også. Du er nesten ferdig nå.
Del 3 – Start PHP-FPM og NGINX på nytt
For å bruke konfigurasjonsendringene du har gjort, start både PHP-FPM og NGINX på nytt. Det kan være nok å laste inn på nytt i stedet for å starte på nytt, men jeg synes det blir litt uventet, avhengig av hvilke innstillinger som endres. I det spesifikke tilfellet ønsket jeg at de gamle PHP-FPM-underprosessene skulle dø med en gang, så det var nødvendig å starte PHP-FPM på nytt, men for NGINX kan det være tilstrekkelig med en ny omstart. Prøv det ut selv.
sudo service nginx restart
Og vips, du er ferdig. Hvis du gjorde alt riktig, skal den virtuelle verten du endret nå bruke den nye PHP-FPM-poolen og ikke dele underprosesser med noen andre virtuelle verter.
