Come impostare pool PHP-FPM separati in NGINX
Pubblicato: 15 febbraio 2025 alle ore 11:52:33 UTC
Ultimo aggiornamento: 12 gennaio 2026 alle ore 08:29:59 UTC
In questo articolo, esaminerò i passaggi di configurazione necessari per eseguire più pool PHP-FPM e connettere NGINX ad essi tramite FastCGI, consentendo la separazione dei processi e l'isolamento tra host virtuali.
How to Set Up Separate PHP-FPM Pools in NGINX
Le informazioni contenute in questo post si basano su NGINX 1.4.6 e PHP-FPM 5.5.9 in esecuzione su Ubuntu Server 14.04 x64. Potrebbero essere valide anche per altre versioni. (Aggiornamento: posso confermare che, a partire da Ubuntu Server 24.04, PHP-FPM 8.3 e NGINX 1.24.0, tutte le istruzioni contenute in questo post funzionano ancora)
Esistono numerosi vantaggi nell'impostare più pool di processi figlio PHP-FPM anziché eseguirli tutti nello stesso pool. Tra i principali, la sicurezza, la separazione/isolamento e la gestione delle risorse.
Qualunque sia la tua motivazione, questo post ti aiuterà a farlo :-)
Parte 1 – Impostare un nuovo pool PHP-FPM
Per prima cosa, devi individuare la directory in cui PHP-FPM memorizza le configurazioni del pool. Su Ubuntu 14.04, questa è /etc/php5/fpm/pool.d di default. Probabilmente lì è già presente un file chiamato www.conf, che contiene la configurazione del pool predefinito. Se non hai mai consultato quel file prima, probabilmente dovresti esaminarlo e modificarne le impostazioni per la tua configurazione, poiché le impostazioni predefinite sono per un server piuttosto poco potente, ma per ora basta farne una copia in modo da non dover ricominciare da zero:
Naturalmente, sostituisci "mypool" con il nome che preferisci per la tua piscina.
Ora apri il nuovo file usando nano o qualsiasi altro editor di testo tu preferisca e modificalo in base alle tue esigenze. Probabilmente vorrai modificare i numeri dei processi figlio e, eventualmente, l'utente e il gruppo sotto cui gira il pool, ma le due impostazioni che devi assolutamente modificare sono il nome del pool e il socket su cui è in ascolto, altrimenti entrerà in conflitto con il pool esistente e tutto smetterà di funzionare.
Il nome del pool si trova all'inizio del file, racchiuso tra parentesi quadre. Di default è [www]. Modificatelo con il nome che preferite; vi suggerisco lo stesso nome che avete dato al file di configurazione, quindi, per questo esempio, cambiatelo in [mypool]. Se non lo modificate, sembra che PHP-FPM caricherà solo il primo file di configurazione con quel nome, il che potrebbe causare problemi.
È quindi necessario modificare il socket o l'indirizzo su cui si è in ascolto, definito dalla direttiva listen. Per impostazione predefinita, PHP-FPM utilizza socket Unix, quindi la direttiva listen avrà probabilmente questo aspetto:
Puoi modificarlo con qualsiasi nome valido tu voglia, ma, ripeto, ti consiglio di attenerti a qualcosa di simile al nome del file di configurazione, quindi potresti ad esempio impostarlo come:
Bene, allora salva il file ed esci dall'editor di testo.
Parte 2 – Aggiornare la configurazione dell'host virtuale NGINX
Ora è necessario aprire il file host virtuale NGINX con la configurazione FastCGI che si desidera modificare in un nuovo pool, o meglio, connettersi al nuovo socket.
Di default su Ubuntu 14.04, questi sono salvati in /etc/nginx/sites-available, ma possono essere definiti anche altrove. Probabilmente è meglio sapere dove si trovano le configurazioni dei tuoi host virtuali ;-)
Apri il file di configurazione pertinente nel tuo editor di testo preferito e cerca la direttiva fastcgi_pass (che deve essere in un contesto di posizione) che definisce il socket PHP-FPM. Devi modificare questo valore in modo che corrisponda alla nuova configurazione del pool PHP-FPM creata nel passaggio 1, quindi, continuando con il nostro esempio, dovresti modificarlo in:
Fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Quindi salva e chiudi anche quel file. Hai quasi finito.
Parte 3 – Riavviare PHP-FPM e NGINX
Per applicare le modifiche di configurazione apportate, riavviate sia PHP-FPM che NGINX. Potrebbe essere sufficiente ricaricare anziché riavviare, ma trovo che sia un metodo un po' imprevedibile, a seconda delle impostazioni modificate. Nel caso specifico, volevo che i vecchi processi figlio di PHP-FPM terminassero immediatamente, quindi era necessario riavviare PHP-FPM, ma per NGINX un ricaricamento potrebbe essere sufficiente. Provatelo voi stessi.
sudo service nginx restart
Et voilà, il gioco è fatto. Se hai fatto tutto correttamente, l'host virtuale che hai modificato dovrebbe ora utilizzare il nuovo pool PHP-FPM e non condividere processi figlio con altri host virtuali.
