Server Setup · 8 min read · Oct 13, 2025

Installazione di Nginx con PHP 7 e MySQL 5.7 (LEMP) su Ubuntu 16.04 LTS

Nginx (pronunciato “engine x”) è un server HTTP gratuito, open-source e ad alte prestazioni. Nginx è noto per la sua stabilità, il ricco set di funzionalità, la configurazione semplice e il basso consumo di risorse. Questo tutorial mostra come puoi installare Nginx su un server Ubuntu 16.04 con supporto per PHP 7 (tramite PHP-FPM) e supporto per MySQL 5.7 (LEMP = L inux + nginx (pronunciato “ e ngine x”) + M ySQL + P HP).

1 Nota Preliminare

In questo tutorial, utilizzo il nome host server1.example.com con l’indirizzo IP 192.168.1.100. Queste impostazioni potrebbero differire per te, quindi devi sostituirle dove appropriato.

Sto eseguendo tutti i passaggi di questo tutorial con privilegi di root, quindi assicurati di essere connesso come root:

sudo -s

2 Installazione di MySQL 5.7

Per installare MySQL, eseguiamo:

apt-get -y install mysql-server mysql-client

Ti verrà chiesto di fornire una password per l’utente root di MySQL - questa password è valida per l’utente root@localhost così come per [email protected], quindi non dobbiamo specificare manualmente una password root di MySQL in seguito:

Nuova password per l’utente MySQL “root”: <– yourrootsqlpassword
Ripeti la password per l’utente MySQL “root”: <– yourrootsqlpassword

Per proteggere il server del database e rimuovere l’utente anonimo e il database di test, esegui il comando mysql_secure_installation.

mysql_secure_installation

Ti verranno poste queste domande:

root@server1:~# mysql_secure_installation
Proteggere il deployment del server MySQL.
Inserisci la password per l'utente root: <-- Inserisci la password root di MySQL
Il PLUGIN VALIDATE PASSWORD può essere utilizzato per testare le password  
e migliorare la sicurezza. Controlla la forza della password  
e consente agli utenti di impostare solo quelle password che sono  
sufficientemente sicure. Vuoi configurare il plugin VALIDATE PASSWORD?
Premi y|Y per Sì, qualsiasi altro tasto per No: <-- Premi y se vuoi questa funzione o premi Invio altrimenti.  
Utilizzando la password esistente per root.  
Cambiare la password per root? ((Premi y|Y per Sì, qualsiasi altro tasto per No) : <-- Premi invio
... salto.  
Per impostazione predefinita, un'installazione di MySQL ha un utente anonimo,  
che consente a chiunque di accedere a MySQL senza dover avere  
un account utente creato per loro. Questo è inteso solo per  
testare e per rendere l'installazione un po' più fluida.  
Dovresti rimuoverli prima di passare a un ambiente di produzione.
Rimuovere gli utenti anonimi? (Premi y|Y per Sì, qualsiasi altro tasto per No) : <-- y  
Successo.

Normalmente, a root dovrebbe essere consentito connettersi solo da  
'localhost'. Questo assicura che qualcuno non possa indovinare  
la password di root dalla rete.
Negare l'accesso remoto a root? (Premi y|Y per Sì, qualsiasi altro tasto per No) : <-- y  
Successo.
Per impostazione predefinita, MySQL viene fornito con un database chiamato 'test' che  
chiunque può accedere. Questo è anche inteso solo per testare,  
e dovrebbe essere rimosso prima di passare a un ambiente di produzione.

Rimuovere il database di test e l'accesso ad esso? (Premi y|Y per Sì, qualsiasi altro tasto per No) : <-- y  
- Eliminazione del database di test...  
Successo.
- Rimozione dei privilegi sul database di test...  
Successo.
Ricaricare le tabelle dei privilegi garantirà che tutte le modifiche  
apportate finora abbiano effetto immediato.
Ricaricare le tabelle dei privilegi ora? (Premi y|Y per Sì, qualsiasi altro tasto per No) : <-- y  
Successo.
Tutto fatto!

MySQL è ora protetto.

3 Installazione di Nginx

Nel caso in cui tu abbia già installato Apache2, rimuovilo prima con questi comandi e poi installa nginx:

service apache2 stop  
update-rc.d -f apache2 remove  
apt-get remove apache2

Nginx è disponibile come pacchetto per Ubuntu 16.04 che possiamo installare.

apt-get -y install nginx

Avvia nginx successivamente:

service nginx start

Digita l’indirizzo IP o il nome host del tuo server web in un browser (ad es. http://192.168.1.100), e dovresti vedere la seguente pagina:

La pagina predefinita di Nginx su Ubuntu.

La radice del documento predefinita di nginx su Ubuntu 16.04 è /var/www/html.

4 Installazione di PHP 7

Possiamo far funzionare PHP in nginx tramite PHP-FPM (PHP-FPM (FastCGI Process Manager) è un’implementazione alternativa di PHP FastCGI con alcune funzionalità aggiuntive utili per siti di qualsiasi dimensione, specialmente siti più trafficati) che installiamo come segue:

apt-get -y install php7.0-fpm

PHP-FPM è un processo daemon (con lo script di init php7.0-fpm) che esegue un server FastCGI sul socket /run/php/php7.0-fpm.sock.

5 Configurazione di nginx

La configurazione di nginx si trova in /etc/nginx/nginx.conf che apriamo ora:

nano /etc/nginx/nginx.conf

La configurazione è facile da capire (puoi saperne di più qui: http://wiki.nginx.org/NginxFullExample e qui: http://wiki.nginx.org/NginxFullExample2)

Per prima cosa (questo è facoltativo) regola il keepalive_timeout a un valore ragionevole:

[...]  
    keepalive_timeout   2;  
[...]  

Gli host virtuali sono definiti nei contenitori server {}. L’host virtuale predefinito è definito nel file /etc/nginx/sites-available/default - modifichiamolo come segue:

nano /etc/nginx/sites-available/default
[...]  
server {  
 listen 80 default_server;  
 listen [::]:80 default_server;  
  
 # Configurazione SSL  
 #  
 # listen 443 ssl default_server;  
 # listen [::]:443 ssl default_server;  
 #  
 # Nota: Dovresti disabilitare gzip per il traffico SSL.  
 # Vedi: https://bugs.debian.org/773332  
 #  
 # Leggi su ssl_ciphers per garantire una configurazione sicura.  
 # Vedi: https://bugs.debian.org/765782  
 #  
 # Certificati autofirmati generati dal pacchetto ssl-cert  
 # Non usarli in un server di produzione!  
 #  
 # include snippets/snakeoil.conf;  
  
 root /var/www/html;  
  
 # Aggiungi index.php all'elenco se stai usando PHP  
 index index.html index.htm index.nginx-debian.html;  
  
 server_name _;  
  
 location / {  
 # Primo tentativo di servire la richiesta come file, poi  
 # come directory, poi tornare a visualizzare un 404.  
 try_files $uri $uri/ =404;  
 }  
  
 # passa gli script PHP al server FastCGI in ascolto su 127.0.0.1:9000  
 #  
 location ~ \.php$ {  
 include snippets/fastcgi-php.conf;  
  
 # Con php7.0-cgi da solo:  
 # fastcgi_pass 127.0.0.1:9000;  
 # Con php7.0-fpm:  
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;  
 }  
  
 # nega l'accesso ai file .htaccess, se la radice del documento di Apache  
 # coincide con quella di nginx  
 #  
 location ~ \/\.ht {  
  deny all;  
 }  
}
[...]  

servername ; rende questo un host virtuale catchall predefinito (ovviamente, puoi anche specificare un nome host qui come www.example.com).

root /var/www/html; significa che la radice del documento è la directory /var/www/html.

La parte importante per PHP è la stanza location ~ .php$ {}. Decommentala per abilitarla.

Ora salva il file e ricarica nginx:

service nginx reload

Successivamente apri /etc/php/7.0/fpm/php.ini…

nano /etc/php/7.0/fpm/php.ini

… e imposta cgi.fix_pathinfo=0:

[...]  
; cgi.fix_pathinfo fornisce supporto *reale* per PATH_INFO/PATH_TRANSLATED per CGI.  Il comportamento  
; precedente di PHP era impostare PATH_TRANSLATED su SCRIPT_FILENAME, e non comprendere  
; cosa sia PATH_INFO.  Per ulteriori informazioni su PATH_INFO, vedere le specifiche cgi.  Impostare  
; questo a 1 farà sì che PHP CGI corregga i suoi percorsi per conformarsi alla specifica.  Un'impostazione  
; di zero fa sì che PHP si comporti come prima.  Il valore predefinito è 1.  Dovresti correggere i tuoi script  
; per utilizzare SCRIPT_FILENAME piuttosto che PATH_TRANSLATED.  
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]  

Ricarica PHP-FPM:

service php7.0-fpm reload

Ora crea il seguente file PHP nella radice del documento /var/www/html:

nano /var/www/html/info.php

Ora chiamiamo quel file in un browser (ad es. http://192.168.1.100/info.php):

PHP Info su Ubuntu con Nginx.

Come puoi vedere, PHP 7 funziona, e funziona tramite FPM/FastCGI, come mostrato nella riga Server API. Se scorri ulteriormente verso il basso, vedrai tutti i moduli che sono già abilitati in PHP. MySQL non è elencato lì, il che significa che non abbiamo ancora supporto per MySQL in PHP.

6 Ottenere il supporto per MySQL in PHP 7

Per ottenere il supporto per MySQL in PHP, possiamo installare il pacchetto php7.0-mysql. È una buona idea installare anche alcuni altri moduli PHP poiché potresti averne bisogno per le tue applicazioni. Puoi cercare i moduli PHP disponibili in questo modo:

apt-cache search php7.0

Scegli quelli di cui hai bisogno e installali in questo modo:

apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache  php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext

APCu è un’estensione per il modulo PHP Opcache che viene fornito con PHP 7, aggiunge alcune funzionalità di compatibilità per il software che supporta la cache APC (ad es. plugin di cache di Wordpress).

APCu può essere installato come segue:

apt-get -y install php-apcu

Ora ricarica PHP-FPM:

service php7.0-fpm reload

Ora ricarica http://192.168.1.100/info.php nel tuo browser e scorri di nuovo verso il basso nella sezione moduli. Dovresti ora trovare molti nuovi moduli lì, incluso il modulo MySQL:

I moduli PHP sono stati installati.

7 Far utilizzare a PHP-FPM una connessione TCP

Per impostazione predefinita, PHP-FPM ascolta sul socket /var/run/php/php7.0-fpm.sock. È anche possibile far utilizzare a PHP-FPM una connessione TCP. Per fare ciò, apri /etc/php/7.0/fpm/pool.d/www.conf…

nano /etc/php/7.0/fpm/pool.d/www.conf

… e fai in modo che la riga listen appaia come segue:

[...]  
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
[...]  

Questo farà sì che PHP-FPM ascolti sulla porta 9000 sull’IP 127.0.0.1 (localhost). Assicurati di utilizzare una porta che non sia in uso sul tuo sistema.

Quindi ricarica PHP-FPM:

php7.0-fpm reload

Successivamente, controlla la tua configurazione nginx e tutti i tuoi vhosts e cambia la riga fastcgi_pass unix:/ var/run/ php /php7.0-fpm.soc k; in fastcgi_pass 127.0.0.1:9000;, ad esempio in questo modo:

nano /etc/nginx/sites-available/default
[...]  
        location ~ \.php$ {  
 include snippets/fastcgi-php.conf;  
  
 # Con php7.0-cgi da solo:  
 fastcgi_pass 127.0.0.1:9000;  
 # Con php7.0-fpm:  
 # fastcgi_pass unix:/run/php/php7.0-fpm.sock;  
 }
[...]  

Infine, ricarica nginx:

service nginx reload

Questo è tutto. Il server Nginx LEMP è installato.

8 Link

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.