Nginx è un popolare software open source per erogare blog o siti web come quello sul quale risiede la presente guida. In altre parole, Nginx è un server web alternativo al più conosciuto Apache HTTP Server, rispetto al quale adotta un modello di esecuzione basato sugli eventi che, in alcune circostanze, lo rende notevolmente più veloce. In questa guida vedremo dunque come installare Nginx su Linux (Ubuntu o CentOS) e come configurare tutto quanto per avviare immediatamente il nostro server web

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux

Sebbene Nginx sia disponibile anche per Windows, è ottimizzato e realmente consigliabile per l'uso in ambienti di produzione solo su server Linux. La seguente procedura è stata testata con Ubuntu 19.04 (64 bit) e CentOS 7 (64 bit), ma è analoga per tutte le distribuzioni da esse derivate e, presumibilmente, per le generazioni successive.

Passo 1: Aprire il terminale

Se state lavorando via SSH oppure con una edizione spiccatamente "server" (come Ubuntu Server), siete già davanti alla linea di comando, quindi andate oltre.

Se però state impiegando l'edizione "regolare" di Ubuntu per PC, cliccate sul pulsante con i 3x3 punti in basso a sinistra e cercate terminale per lanciare rapidamente l'omonima applicazione

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux - linux apri terminale

» Leggi anche: Come aprire il terminale di Ubuntu

Passo 2: Diventare root

Dovete ora acquisire i privilegi massimi diventando root. Il comando è:

sudo -s

In caso dovesse esservi richiesta la password, digitate quella dell'account corrente.

» Leggi anche: Linux (Ubuntu) e sudo: come disabilitare la richiesta di password quando si eseguono comandi come root

In alternativa, potete utilizzare il vostro utente "normale" ed anteporre sudo ad ogni comando mostrato di seguito.... ma divenire root immediatamente è molto più comodo.

Passo 3: Disinstallare... Nginx?

Prima di iniziare, è opportuno verificare che Nginx non sia già stato installato, magari per errore. Il modo più efficace di farlo è tramite il gestore dei pacchetti:

  • Con Ubuntu: dpkg --list | grep nginx
  • Con CentOS: rpm -qa | grep nginx

Se il comando non mostra alcuna risposta, possiamo tranquillamente andare oltre perché Nginx non è installato.

In caso contrario, è fondamentale disinstallare il pacchetto corrente:

  • Disinstallare Apache da Ubuntu: apt-get purge --auto-remove nginx* -y
  • Disinstallare Apache da CentOS: yum remove nginx* -y

Passo 4: Aggiungere i repository di Nginx

I gruppi che sovraintendono lo sviluppo delle distribuzioni Linux come Ubuntu o CentOS rendono disponibile nei repository ufficiali una specifica versione di Nginx che, però, non è mai realmente l'ultima rilasciata dagli sviluppatori. Considerato che Nginx matura molto rapidamente (e sempre con un'ottima retro-compatibilità) è dunque opportuno installare Nginx direttamente dai "repo" ufficiali dei suoi programmatori.

In concreto, eseguire i comandi seguenti per "agganciare" queste fonti aggiuntive al sistema (potete copia-incollare l'intero blocco di comandi in una volta sola).

Con Ubuntu:

apt install curl gnupg2 ca-certificates lsb-release unzip nano -y

curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -

echo "deb http://nginx.org/packages/mainline/ubuntu/ $(lsb_release -sc) nginx" > /etc/apt/sources.list.d/nginx.list

echo "deb-src http://nginx.org/packages/mainline/ubuntu/ $(lsb_release -sc) nginx" >> /etc/apt/sources.list.d/nginx.list

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux

Con CentOS:

yum install yum-utils unzip nano -y

curl -o /etc/yum.repos.d/nginx.repo https://turbolab.it/scarica/283

yum-config-manager --enable nginx-mainline

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux

Passo 5: Installare Nginx

Procediamo ora materialmente ad installare Nginx:

  • Con Ubuntu: apt update && apt install nginx -y
  • Con CentOS: yum clean expire-cache && yum install nginx -y

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux - apt install nginx

Su CentOS (non Ubuntu), dobbiamo aprire le porte di Nginx sul firewall:

firewall-cmd --zone=public --add-port=80/tcp --permanent && firewall-cmd --zone=public --add-port=443/tcp --permanent && systemctl restart firewalld

» Leggi anche: Aprire le porte sul firewall di Linux CentOS - guida rapida a firewalld

L'installazione di Nginx è terminata! Riavviamo il servizio per renderlo operativo:

systemctl restart nginx

Il nostro webserver è ora attivo e mostra una pagina di benvenuto "standard" a tutti i client che vi si colleghino. Se la macchina sulla quale è in esecuzione Nginx è dotata di un browser web, possiamo verificarlo aprendo http://localhost, ovvero facendo collegare il sistema... a se stesso

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux

Passo 6: Disattivare il sito di default

Tornati alla linea di comando, disattiviamo la configurazione che mostra questo sito di default, spostandola fuori dalla cartella dalla quale vengono caricate automaticamente tutte le configurazioni:

mv /etc/nginx/conf.d/default.conf /etc/nginx/default_backup.conf

Al suo posto, facciamo in modo che il webserver ritorni un errore 404 (sito non trovato) ogni volta che viene richiesto un dominio non esplicitamente configurato. Allo scopo, otteniamo la configurazione già pronta all'uso:

curl -o /etc/nginx/conf.d/05_global_default_vhost_disable.conf https://turbolab.it/scarica/208

Riavviamo il servizio per rendere effettive le modifiche:

systemctl restart nginx

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux - nginx disable default

Aprendo ora http://localhost, dovremo visualizzare un errore

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux - nginx default disabled

Perfetto! Nei passi successivi configureremo esplicitamente il nostro sito.

Passo 7: Creare la cartella Web

Creiamo ora una cartella adibita a contenere tutti i siti web che andremo ad erogare. A me piace usare /home/web/, ma qualsiasi percorso va benissimo. Procediamo dunque alla creazione della directory:

mkdir /home/web

All'interno di web, creare una cartella con il nome del nostro primo sito. Per questa configurazione iniziale useremo il nome local poiché conterrà il sito che sarà mostrato quando si richiederà esplicitamente http://localhost collegandosi dal server a se stesso:

mkdir /home/web/local

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux - struttura cartelle web nginx

Passo 8: Scaricare il file index

Scaricate ora uno zip con alcuni file di esempio ed estraete tutto quanto nella cartella local creata al Passo procedente:

curl -o /home/web/local/file_esempio.zip https://turbolab.it/scarica/145 && unzip -o /home/web/local/file_esempio.zip -d /home/web/local/ && rm -f /home/web/local/file_esempio.zip

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux - home nginx local con file esempio

Per maggiori informazioni su questi comandi:

» Leggi: Come scaricare file da linea di comando: guida a curl e wget per Linux Ubuntu/CentOS

» Leggi: Guida zip unzip con Linux: come zippare (comprimere, creare) e unzippare (estrarre) archivi .zip da linea di comando con Ubuntu e CentOS - errore bash: unzip: command not found

Passo 9: Scaricare il file di configurazione

Ora preleviamo il file di configurazione semi-pronto che consente a Nginx di rispondere alle richieste di http://localhost erogando i file del nostro sito e copiamolo direttamente nella cartella dalla quale Nginx carica le configurazioni dei siti disponibili:

curl -o /etc/nginx/conf.d/local.conf https://turbolab.it/scarica/282

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux - Schermata del 2019-04-20 16-43-41

Passo 10: Configurare un sito per localhost

Aprite ora il file di configurazione appena ottenuto:

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

Al suo interno, dobbiamo valorizzare opportunamente il parametro di configurazione root: è quello che indica dove si trovano i file HTML, PHP, CSS, immagine ecc. che compongono il sito web.

Di default è impostato a "/home/web/local", ovvero la cartella creata al Passo 7. Fate attenzione a conservare le virgolette, e modificate come da vostra situazione corrente.

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux

Salvate le modifiche e chiudete: anche qui abbiamo finito.

Passo 11: Riavviare il servizio

Ora che la configurazione è pronta, dobbiamo riavviare Nginx per renderla effettiva:

systemctl restart nginx

Passo 12: Visualizzare la pagina con il browser web

Tutto è pronto: apriamo il browser web e digitiamo l'URL http://localhost per visitare il sito in esecuzione sul PC locale (se si tratta di un server senza interfaccia grafica, usiamo curl http://localhost per visualizzare l'HTML a Terminale).

Se tutto funziona correttamente, vedrete la pagina di test

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux

Provate ora ad aprire con l'editor il file index.html presente nella sottocartella /home/web/local(vedi Passo 7 e Passo 8). Fate qualche modifica, salvate, ricaricate la pagina nel browser e vedrete le modifiche apportate.

Tanto per capire meglio come funziona l'installazione attuale, svolgete questo semplice esercizio:

  1. copiare il file index.html
  2. rinominate la copia in pagina1.html
  3. usando l'editor di testi, modificate pagina1.html e scrivete qualcosa a piacere (anche solo Ciao a tutti! va benissimo)
  4. da browser web, aprite l'indirizzo http://localhost/pagina1.html
  5. la nuova pagina verrà mostrata all'interno del browser

La situazione è dunque la seguente (la schermata è stata catturata da Windows, ma è analoga sotto Linux)

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux

In definitiva: accodando il nome del file desiderato all'indirizzo http://localhost/, il browser richiede detto file al server web. Se il file esiste nella cartella che abbiamo specificato come root, Nginx lo fornisce al browser, che lo interpreta e lo mostra.

Passo 13: Erogare molteplici siti

La configurazione attuale funziona perché abbiamo configurato esplicitamente tutto quanto per rispondere a http://localhost/. Proseguiamo ora facendo in modo che il servizio risponda anche ad altri domini: ad esempio, potremmo erogare i siti sito1.com e sito2.com dallo stesso PC/server.

Iniziamo aggiungendo queste righe al file hosts:

127.0.0.1 sito1.com www.sito1.com

127.0.0.1 sito2.com www.sito2.com

127.0.0.1 sito3.com www.sito3.com

Così facendo, ogni tentativo di contattare questi domini viene risolta sul sistema locale. Se si tratta di una connessione HTTP (come quella avanzata del browser quando tenta di mostrare una pagina web), risponderà dunque il nostro Nginx.

Creiamo le cartelle adibite ad erogare i due nuovi siti. Seguendo l'impostazione precedente (Passo 7), useremo qualcosa di simile a:

  • mkdir /home/web/sito1
  • mkdir /home/web/sito2

Scompattiamo all'interno di entrambe le cartelle il pacchetto con i file di esempio già usato in precedenza:

curl -o /home/web/file_esempio.zip https://turbolab.it/scarica/145 && unzip -o /home/web/file_esempio.zip -d /home/web/sito1/ && unzip -o /home/web/file_esempio.zip -d /home/web/sito2/ && rm -f /home/web/file_esempio.zip

Ora entriamo e modifichiamo le rispettive copie di index.html per mostrare un messaggio che ci permetta poi di distinguere i due siti. Ad esempio:

  • nano /home/web/sito1/index.html: scriviamo Benvenuto su sito1.com
  • nano /home/web/sito2/index.html: scriviamo Stai guardando sito2.com

Procediamo ora a duplicare il file local.conf (ottenuto al Passo 9) creando un file di configurazione per sito1.com:

cp /etc/nginx/conf.d/local.conf /etc/nginx/conf.d/sito1.conf

Apriamo il nuovo file:

nano /etc/nginx/conf.d/sito1.conf

Ora:

  1. valorizziamo server_name di modo che corrisponda al dominio che vogliamo gestire (in questo caso: sito1.com)
  2. modifichiamo il percorso dopo la direttiva root come già fatto al precedente Passo 10 per fare in modo che punti alla directory che contiene il nostro sito (in questo caso: /home/web/sito1)
  3. salvare le modifiche al file e chiudere

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux - nginx vhost sito1

Ripetere i passi appena elencati per configurare sito2.com, quindi riavviate il servizio:

systemctl restart nginx

Se tutto è filato liscio, tornate al browser web e provate ad aprire http://sito1.com: dovreste vedere il messaggio personalizzato che avevamo inserito nel relativo file index.html. Aprendo http://sito2.com verrà visualizzata l'altra pagina.

Guida Nginx Ubuntu CentOS: come installare configurare Nginx Linux - vhost sito1 sito2 sito3

Aprendo http://sito3.com (il dominio che avevamo inserito nel file hosts ma non configurato in Nginx) verrà mostrato un messaggio di errore proprio perché non è stato configurato.

Cosa fare ora?

Arrivati a questo punto, il nostro Nginx su Linux è perfettamente configurato e funzionante. Probabilmente, però, vorremo installare anche PHP e MySQL di modo da eseguire un gestore di contenuti (CMS) come WordPress e creare il nostro blog, oppure imparare a programmare. Per il resto della guida:

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