Hur man ställer in separata PHP-FPM-pooler i NGINX
Publicerad: 15 februari 2025 kl. 11:53:06 UTC
Senast uppdaterad: 12 januari 2026 kl. 08:30:07 UTC
I den här artikeln går jag igenom konfigurationsstegen som behövs för att köra flera PHP-FPM-pooler och ansluta NGINX till dem via FastCGI, vilket möjliggör processeparation och isolering mellan virtuella värdar.
How to Set Up Separate PHP-FPM Pools in NGINX
Informationen i det här inlägget är baserad på NGINX 1.4.6 och PHP-FPM 5.5.9 som körs på Ubuntu Server 14.04 x64. Den kan vara giltig för andra versioner, men inte nödvändigtvis. (Uppdatering: Jag kan bekräfta att från och med Ubuntu Server 24.04, PHP-FPM 8.3 och NGINX 1.24.0 fungerar alla instruktioner i det här inlägget fortfarande.)
Det finns ett antal fördelar med att konfigurera flera PHP-FPM-underprocesspooler snarare än att köra allt i samma pool. Säkerhet, separation/isolering och resurshantering är några viktiga fördelar.
Oavsett vad din motivation är, kommer det här inlägget att hjälpa dig att göra det :-)
Del 1 – Konfigurera en ny PHP-FPM-pool
Först behöver du hitta katalogen där PHP-FPM lagrar sina poolkonfigurationer. På Ubuntu 14.04 är detta som standard /etc/php5/fpm/pool.d. Det finns förmodligen redan en fil där som heter www.conf, som innehåller konfigurationen för standardpoolen. Om du inte har tittat på den filen förut är det troligt att du borde gå igenom den och justera inställningarna i den för din installation eftersom standardinställningarna är för en ganska underpresterande server, men för tillfället gör bara en kopia av den så att vi inte behöver börja om från början:
Självklart, ersätt "mypool" med vad du vill att din pool ska heta.
Öppna nu den nya filen med nano eller vilken textredigerare du föredrar och justera den så att den passar ditt syfte. Du kommer förmodligen att vilja justera barnprocessnumren och eventuellt vilken användare och grupp poolen körs under, men de två inställningarna som du absolut måste ändra är poolens namn och socketen den lyssnar på, annars kommer den att komma i konflikt med den befintliga poolen och saker och ting kommer att sluta fungera.
Poolens namn står nära toppen av filen, inom hakparenteser. Som standard är det [www]. Ändra detta till vad du vill; jag föreslår samma namn som du gav konfigurationsfilen, så för exemplets skull ändra det till [mypool]. Om du inte ändrar det verkar det som att PHP-FPM bara laddar den första konfigurationsfilen med det namnet, vilket sannolikt kommer att orsaka problem.
Du behöver sedan ändra socketen eller adressen du lyssnar på, vilket definieras av listen-direktivet. Som standard använder PHP-FPM Unix-sockets, så ditt listen-direktiv kommer förmodligen att se ut så här:
Du kan ändra det till vilket giltigt namn du vill, men återigen föreslår jag att du håller dig till något liknande konfigurationsfilnamnet, så du kan till exempel ställa in det till:
Okej, spara filen och avsluta textredigeraren.
Del 2 – Uppdatera konfigurationen för virtuell NGINX-värd
Nu behöver du öppna den virtuella NGINX-värdfilen med FastCGI-konfigurationen som du vill ändra till en ny pool – eller snarare ansluta till den nya socketen.
Som standard i Ubuntu 14.04 lagras dessa under /etc/nginx/sites-available, men kan också definieras någon annanstans. Du vet förmodligen bäst var dina virtuella värdkonfigurationer finns ;-)
Öppna den relevanta konfigurationsfilen i din favorittextredigerare och leta efter fastcgi_pass-direktivet (som måste finnas i en platskontext) som definierar PHP-FPM-socketen. Du måste ändra detta värde så att det matchar den nya PHP-FPM-poolkonfigurationen du gjorde under steg ett, så om vi fortsätter vårt exempel skulle du ändra detta till:
Fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Spara och stäng sedan även den filen. Du är nästan klar nu.
Del 3 – Starta om PHP-FPM och NGINX
För att tillämpa de konfigurationsändringar du har gjort, starta om både PHP-FPM och NGINX. Det kan räcka med att ladda om istället för att starta om, men jag tycker att det blir lite av en omstart, beroende på vilka inställningar som ändras. I det specifika fallet ville jag att de gamla PHP-FPM-underprocesserna skulle dö direkt, så det behövdes starta om PHP-FPM, men för NGINX kan en omstart vara tillräcklig. Testa själv.
sudo service nginx restart
Och voilà, du är klar. Om du gjorde allt korrekt borde den virtuella värden du modifierade nu använda den nya PHP-FPM-poolen och inte dela underprocesser med några andra virtuella värden.
