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 -s2 Installazione di MySQL 5.7
Per installare MySQL, eseguiamo:
apt-get -y install mysql-server mysql-clientTi 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_installationTi verranno poste queste domande:
root@server1:~# mysql_secure_installationProteggere il deployment del server MySQL.Inserisci la password per l'utente root: <-- Inserisci la password root di MySQLIl 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 apache2Nginx è disponibile come pacchetto per Ubuntu 16.04 che possiamo installare.
apt-get -y install nginxAvvia nginx successivamente:
service nginx startDigita 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 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-fpmPHP-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.confLa 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 reloadSuccessivamente 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 reloadOra crea il seguente file PHP nella radice del documento /var/www/html:
nano /var/www/html/info.phpOra chiamiamo quel file in un browser (ad es. http://192.168.1.100/info.php):

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.0Scegli 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-gettextAPCu è 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-apcuOra ricarica PHP-FPM:
service php7.0-fpm reloadOra 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:

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 reloadSuccessivamente, 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 reloadQuesto è tutto. Il server Nginx LEMP è installato.
8 Link
- nginx: http://nginx.net/
- wiki di nginx: http://wiki.codemongers.com/Main
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MySQL: http://www.mysql.com/
- Ubuntu: http://www.ubuntu.com/
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.