NGINX è il server web, alternativo ad Apache HTTP Server, che costituisce oggi lo standard de facto quando si parla di erogare siti basati su WordPress o, più in generale, applicazioni web realizzate in PHP. Ma NGINX, da solo, non è in grado di eseguire codice PHP: la dotazione base permette infatti solamente di erogare file e pagine HTML statiche. Per utilizzare PHP con NGINX è dunque indispensabile installare PHP e PHP-FPM, poi interfacciarli con NGINIX. Vediamo allora come come configurare NGINX e PHP 8 su Ubuntu

Procedura aggiornata e ottimizzata per rispecchiare la disponibilità di PHP 8.2 e ottenere il miglior risultato con Ubuntu 22.04

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM

In questo articolo ci concentreremo, nello specifico, sulla configurazione di NGINX e PHP su Ubuntu. Per la guida equivalente, ma utilizzando Apache HTTP Server al posto di NGINX, fai riferimento alle rispettive trattazioni dedicate che trovi qui:

» Leggi: Installare e configurare un server web: La Grande Guida ad Apache/Nginx, PHP, MySQL su Windows e Linux

La procedura seguente è stata testata su Ubuntu 22.04 e 20.04 (sia "Desktop", sia "Server"), ma è analoga per tutte le distribuzioni derivate (fra le quali "Mint") e, presumibilmente, per le iterazioni successive.

Una stesura precedente di questa guida (archiviata qui) trattava anche CentOS, mentre oggi è focalizzata unicamente su Ubuntu.

Per quanto riguarda PHP: l'ultima versione testata è PHP 8.2, ma nel corso degli anni ho svolto la medesima configurazione anche sulle generazioni precedenti: PHP 8.x, PHP 7.x e PHP 5.6.

Prima di configurare NGINX e PHP...

Prima di iniziare a impartire comandi è opportuno ricordare come funziona il flusso di richiesta e risposta di una "pagina PHP":

  1. il browser web del visitatore invia la richiesta al server che ospita il sito che l'utente vuole visualizzare
  2. su tale server è in esecuzione NGINX, cioè un programma, detto "server web", in grado di elaborare la richiesta
  3. NGINX comunica con l'interprete PHP per elaborare la pagina richiesta
  4. l'interprete PHP esegue il codice PHP della pagina, che può prevedere logiche per la lettura/scrittura da un database, la gestione dei cookie, la sessione utente o l'accesso a risorse esterne
  5. l'interprete PHP restituisce a NGINX la pagina elaborata, sottoforma di HTML
  6. NGINX invia detta pagina HTML al visitatore
  7. il browser web del visitatore legge la pagina HTML ricevuta e la mostra
  8. in caso la pagina HTML includesse altre risorse, come immagini, fogli di stile o file javascript, li richiede al server web
  9. il server web restituisce tali risorse al browser del visitatore, che le mostra nella pagina

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM - Diagramma server web con backend PHP

Tale flusso è volutamente semplificato (non abbiamo parlato di DNS, indirizzi IP, router e porte TCP) ma è funzionale alla trattazione corrente. Il concetto-chiave da capire è che il browser web del visitatore non interagisce direttamente con la pagina PHP, ma solamente con il software impiegato come server web.

PHP 8 e NGINX, Passo 1: Installare NGINX

Per quanto appena detto, la prima cosa da fare è proprio... installare NGINX. Segui dunque la procedura trattata in questo approfondimento dedicato:

» Leggi: Come installare NGINX su Ubuntu - La Guida Definitiva per configurare un Server Web con Linux

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM

Ti raccomando caldamente di non andare oltre fino a quando non sarai riuscito, quantomeno, a visualizzare una pagina HTML statica erogata tramite NGINX.

PHP 8 e NGINX, Passo 2: Installare PHP e PHP-FPM

Procedi dunque ad installare PHP. Nello specifico: NGINX richiede PHP-FPM (FastCGI Process Manager). Si tratta di una modalità nella quale l'interprete PHP, ovvero il programma che legge il codice presente nei file .php e li esegue, viene eseguito come servizio indipendente, con il quale poi il server web si interfaccia tramite il protocollo FastCGI. Abbiamo visto la procedura passo per passo in questo approfondimento:

» Leggi: Guida: come installare PHP su Ubuntu Linux (PHP-FPM)

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM

Una volta fatto ciò, procediamo a configurare la comunicazione fra i due programmi.

PHP 8 e NGINX, Passo 3: Aprire il Terminale

Se stai lavorando via SSH oppure su Ubuntu Server sei già davanti alla linea di comando, quindi prosegui oltre.

Se però ti trovi in un ambiente grafico, devi avviare il Terminale: il mio metodo preferito è tramite la combinazione da tastiera Ctrl+Alt+T. In alternativa:

  1. clicca sul pulsante con i 3x3 punti in basso a sinistra
  2. digita terminale
  3. clicca sul collegamento mostrato

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM - linux apri terminale

» Leggi anche: Come aprire il terminale di Ubuntu

PHP 8 e NGINX, Passo 4: Diventare root

La prima cosa da fare all'interno del Terminale è acquisire i privilegi massimi diventando root. Il comando è:

sudo -s

In caso ti fosse richiesta la password, digita quella del tuo utente Linux (quella che usi per eseguire login al PC)

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM

» Leggi anche: Sudo senza password con Ubuntu: come disabilitare la richiesta di password quando si eseguono comandi come root (video)

PHP 8 e NGINX, Passo 5: Scaricare il file di configurazione per NGINX (php-fpm.conf)

Procedi scaricando il file di configurazione (visualizzabile qui) che attiva la comunicazione fra NGINX e PHP-FPM:

apt update && apt install curl -y && curl -Lo /etc/nginx/php-fpm.conf https://raw.githubusercontent.com/TurboLabIt/webstackup/master/config/nginx/40_php-fpm.conf

Il comando appena impartito renderà disponibile detto file nel percorso /etc/nginx/php-fpm.conf

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM - php-fpm scaricato

PHP 8 e NGINX, Passo 6: Configurare il percorso al socket

Affinché la comunicazione fra NGINX e PHP-FPM funzioni correttamente, è necessario che i due servizi impieghino un socket condiviso. Nella configurazione standard di Ubuntu, tale socket viene esposto come se fosse un file su disco.

Il percorso di tale file deve essere inserito in due punti:

  • nel file di configurazione di NGINX che abbiamo appena scaricato
  • nel file di configurazione di PHP-FPM

Per scoprire il percorso del file, leggi questa informazione dal file di configurazione dedicato di PHP-FPM. Il comando da impartire è:

export PHP_VER=8.2 && cat /etc/php/${PHP_VER}/fpm/pool.d/www.conf | grep 'listen ='

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM

Attenzione, naturalmente, a modificare il valore della variabile PHP_VER= a seconda della versione di PHP che hai installato e che vuoi abilitare.

Come si nota nello screenshot precedente, nel mio caso il comando ha rivelato una riga simile alla seguente:

listen = /run/php/php8.2-fpm.sock

(l'altra riga, quella che inizia con ;, si riferisce ad un altro parametro, ed è un commento)

Ebbene: proprio il percorso /run/php/php8.2-fpm.sock è il percorso al socket che ci interessa!

In caso non dovesse funzionare, possiamo aprire manualmente il file e ispezionare il contenuto. Il comando è:

export PHP_VER=8.2 && apt install nano -y && nano /etc/php/${PHP_VER}/fpm/pool.d/www.conf

Il valore che ci interessa è quello del parametro listen =

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM

Una volta che ti sei appuntato il percorso al socket, apri il file scaricato poco fa:

nano /etc/nginx/php-fpm.conf

All'interno di tale file, localizza la direttiva fastcgi_pass. Come vedi, inizialmente legge qualcosa di simile a

fastcgi_pass unix:/run/php/php-fpm.sock;

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM

Ebbene: devi modificare tale valore per fare in modo che riporti il percorso del tuo socket. Nel mio caso, ad esempio, avevo letto poco fa che il percorso del socket era /run/php/php8.2-fpm.sock. Ecco quindi che ho modificato il parametro per farlo puntare allo stesso file:

fastcgi_pass unix:/run/php/php8.2-fpm.sock;

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM

È di importanza cruciale che i due parametri riportino lo stesso, medesimo percorso. Ad esempio:

  • PHP: listen = /run/php/php8.2-fpm.sock
  • NGINX: fastcgi_pass unix:/run/php/php8.2-fpm.sock;

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM - nginx php-fpm socket errore

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM - nginx php-fpm socket ok

In caso il percorso fosse diverso, modificate /etc/nginx/php-fpm.conf per uniformarlo.

Una volta fatto, salva e chiudi battendo da tastiera Ctrl+O, poi Invio, poi Ctrl+X.

PHP 8 e NGINX, Passo 7: Autorizzare Nginx a connettersi al socket

Proseguiamo garantendo all'utente nginx, ovvero quello che esegue il processo del server web, i permessi per connettersi al socket PHP. In caso contrario, Nginx mostrerà solo l'errore 502 Bad Gateway e nei log apparirà una dicitura simile a connect() to unix:/run/php/php8.2-fpm.sock failed (13: Permission denied)

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM - nginx php-fpm errore 502 permission denied

Per prevenire il problema è sufficiente aggiungere l'utente di NGINX al gruppo autorizzato a connettersi al socket:

usermod -aG www-data nginx

La modifica diverrà effettiva solo dopo il riavvio di NGINX, operazione che svolgeremo alla fine della configurazione.

PHP 8 e NGINX, Passo 8: Aprire il file di configurazione del sito

Il file di configurazione che hai scaricato al precedente capitoletto Scaricare il file di configurazione per NGINX è attualmente "inerte". Per attivarlo, devi includerlo all'interno di ogni "sito NGINX" (server block) nel quale vuoi rendere disponibile PHP.

Iniziamo individuando il file di configurazione del sito erogato da NGINX per il quale vuoi attivare PHP:

  • se hai installato Nginx tramite il repository ufficiale dei suoi sviluppatori (come altamente consigliato nella nostra guida a NGINX), detto file è situato nella cartella /etc/nginx/conf.d/
  • se hai installato NGINX tramite i repository di Ubuntu, guarda in /etc/nginx/sites-enabled/

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM - nginx percorso virtualhost

Una volta individuato il file di configurazione, aprilo in modifica impartendo un comando simile a:

nano /etc/nginx/conf.d/local.conf

Per questo esempio utilizzerò il file chiamato local.conf che avevamo preparato nella guida a NGINX per erogare il sito di esempio raggiungibile all'indirizzo http://localhost.

PHP 8 e NGINX, Passo 8: Includere php-fpm.conf

Una volta davanti al file di configurazione, individua il blocco server { ... }

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM

Al suo interno, inserisci la direttiva che include il file di configurazione di PHP scaricato al precedente capitoletto Scaricare il file di configurazione per NGINX. Da direttiva da copia-incollare è:

include "/etc/nginx/php-fpm.conf";

Puoi inserire questa direttiva in un punto qualsiasi all'interno del blocco server { ... }

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM - nginx include php-fpm

Una volta fatto, salva e chiudi battendo da tastiera Ctrl+O, poi Invio, poi Ctrl+X.

PHP 8 e NGINX, Passo 9: Riavviare Nginx

Per rendere effettive le varie modifiche apportate nel corso di questa guida devi riavviare il processo di NGINX. Allo scopo, ti consiglio di usare SEMPRE questo specifico comando concatenato:

nginx -t && service nginx restart

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM

In questo modo, NGINX verifica che la nuova configurazione sia corretta prima di avviare o riavviare il servizio. Se viene rilevato un problema:

  1. viene visualizzata una chiara indicazione di dove si trova l'errore
  2. NGINX continua a funzionare comunque con la configurazione precedente

Questo è un piccolo ma importante "trucco" che fa la differenza, soprattutto quando si utilizza NGINX su un server di produzione. Ricordalo!

PHP 8 e NGINX, Passo 10: Test di PHP

Ora è tutto è pronto. Se il computer sul quale è in esecuzione PHP è dotato di un browser web, puoi aprire direttamente http://localhost di modo da far collegare il browser web al servizio di NGINX in esecuzione sul medesimo computer

Guida PHP 8 NGINX Ubuntu: come attivare, installare configurare PHP-FPM

Se invece il sistema non ha il browser web, puoi simulare lo stesso comportamento impartendo questo comando:

curl -Lk http://localhost

Visualizzerai così a terminale i tag HTML che compongono la pagina web.

Indipendentemente che tu abbia usato il browser web o la linea di comando, nota la data visualizzata a centro pagina: se viene visualizzata correttamente, significa che PHP sta funzionando e hai terminato.

Se lo spazio dopo la "freccia" rimane bianco, invece, c'è qualcosa che non va: ripercorri i vari Passi di questo articolo fino ad individuare l'errore.

Cosa fare ora

Se non vengono mostrati messaggi di errore, significa che ha raggiunto l'obbiettivo: hai correttamente configurato PHP 8 e NGINX! Fai riferimento alla nostra guida generale a PHP per proseguire con le verifiche:

» Leggi: Guida: come installare PHP su Ubuntu Linux (PHP-FPM)