Come impostare pool PHP-FPM separati in NGINX
Pubblicato: 15 febbraio 2025 alle ore 11:52:33 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 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 o meno 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 in questo post funzionano ancora)
Ci sono diversi vantaggi nell'impostare più pool di processi figlio PHP-FPM anziché eseguire tutto nello stesso pool. Sicurezza, separazione/isolamento e gestione delle risorse vengono in mente come alcuni dei principali.
Qualunque sia la tua motivazione, questo post ti aiuterà a realizzarla :-)
Parte 1 – Imposta 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 c'è già un file chiamato www.conf , che contiene la configurazione per il pool di default. Se non hai mai guardato quel file prima, è probabile che tu debba esaminarlo e modificare le impostazioni in esso contenute per la tua configurazione, poiché le impostazioni predefinite sono per un server abbastanza sottodimensionato, ma per ora fanne una copia in modo da non dover partire da zero:
Naturalmente, sostituisci “mypool” con il nome che preferisci per la tua piscina.
Ora apri il nuovo file usando nano o qualsiasi editor di testo tu preferisca e adattalo per adattarlo al tuo scopo. Probabilmente vorrai modificare i numeri dei processi figlio e forse l'utente e il gruppo sotto cui gira il pool, ma le due impostazioni che devi assolutamente cambiare sono il nome del pool e il socket su cui è in ascolto, altrimenti entrerà in conflitto con il pool esistente e le cose smetteranno di funzionare.
Il nome del pool è vicino alla parte superiore del file, racchiuso tra parentesi quadre. Di default è [www] . Cambialo con quello che vuoi; ti suggerisco lo stesso nome che hai dato al file di configurazione, quindi per il bene di questo esempio cambialo in [mypool] . Se non lo cambi, sembra che PHP-FPM caricherà solo il primo file di configurazione con quel nome, il che probabilmente causerà problemi.
Devi quindi cambiare il socket o l'indirizzo che stai ascoltando, che è definito dalla direttiva listen . Di default, PHP-FPM usa socket Unix, quindi la tua direttiva listen probabilmente apparirà così:
Puoi modificarlo con qualsiasi nome valido tu voglia, ma, ancora una volta, ti consiglio di attenerti a qualcosa di simile al nome del file di configurazione, quindi potresti ad esempio impostarlo in:
Bene, allora salviamo il file e chiudiamo l'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 archiviati in /etc/nginx/sites-available, ma possono anche essere definiti altrove. Probabilmente è meglio sapere dove si trovano le configurazioni del tuo host virtuale ;-)
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 che hai creato nel passaggio uno, quindi continuando il nostro esempio dovresti modificarlo in:
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Quindi salva e chiudi anche quel file. Ora hai quasi finito.
Parte 3 – Riavviare PHP-FPM e NGINX
Per applicare le modifiche di configurazione apportate, riavvia sia PHP-FPM che NGINX. Potrebbe essere sufficiente ricaricare anziché riavviare , ma trovo che sia un po' un terno al lotto, a seconda delle impostazioni modificate. Nel caso specifico, volevo che i vecchi processi figlio di PHP-FPM morissero subito, quindi era necessario riavviare PHP-FPM, ma per NGINX potrebbe essere sufficiente ricaricare. Provalo tu stesso.
sudo service nginx restart
Ed ecco fatto. Se hai fatto tutto correttamente, l'host virtuale che hai modificato dovrebbe ora usare il nuovo pool PHP-FPM e non condividere processi figlio con nessun altro host virtuale.