Introduzione
Nginx è uno dei più popolari server web ed è responsabile per l'hosting di alcuni dei maggiori siti al mondo. Il software è leggero e può essere utilizzato sia come server web che come reverse proxy.
In questa guida vedremo come installare Nginx su Ubuntu server, come configurare il firewall, come gestire il processo di Nginx e di come impostare i blocchi dei server per consentire l'hosting di più domini o sottodomini sulla stessa macchina.
Prerequisiti
Prima di iniziare questa guida, dovresti avere un utente non root configurato con i permessi di root. Per fare ciò puoi seguire la guida sulla configurazione iniziale di un server Ubuntu.
Inoltre, prima di iniziare, ricordiamoci di aggiornare l'indice dei pacchetti locali, per avere accessi alle versioni dei software più recenti. Per farlo digitiamo il comando:
sudo apt update
Installare Nginx
Per installare Nginx dalla repository apt, sarà sufficiente digitare il comando:
sudo apt install nginx
Dopo aver acconsentito digitando "Y", apt installerà sul nostro server Nginx e tutte le dipendenze necessarie.
Configurare il Firewall
Per consentire a Nginx di operare, sarà necessario aggiornare la configurazione del firewall. Quando installiamo Nginx, viene automaticamente registrato come servizion nel firewall ufw, rendendoci semplice il procedimento.
Per visualizzare una lista delle applicazioni registrate sul firewall, eseguiamo il comando:
sudo ufw app list
Tra le altre cose, dovrebbero apparire tre profili disponibili per Nginx:
- Nginx Full: questo profilo apre sia la porta 80 per il traffico web normale, non criptato, sia la porta 443, per il traffico criptato TLS/SSL.
- Nginx HTTP: questo profilo apre solo la porta 80 per il traffico web normale, non cripato.
- Nginx HTTPS: questo profilo apre solo la porta 443 per il traffico criptato TLS/SSL.
Si raccomanda sempre di scegliere il profilo più restrittivo per il tipo di traffico che vi è necessario. In questo caso, dato che non andremo a configurare un certificato SSL, ci basterà la porta 80.
Possiamo quindi abilitare il profilo HTTP con il comando:
sudo ufw allow 'Nginx HTTP'
Possiamo poi verificare che il cambiamento sia stato effettuato correttamente con il comando:
sudo ufw status
Verificare il funzionamento di Nginx
Alla fine del processo di installazione, Nginx viene automaticamente avviato, quindi il server web dovrebbe già essere operativo.
Possiamo controllare lo stato di Nginx con systemd, eseguendo il comando:
systemctl status nginx
Nell'output, dovreste trovare la dicitura active (running)
che ci conferma che il servizio è in esecuzione.
Possiamo verificare che il software funzioni effettivamente provando ad accedere alla pagina predefinita di Nginx digitando nella barra di ricerva l'indirizzo IP pubblico del nostro server in questo modo:
http://ip_del_server
A caricamento concluso dovremmo vedere questa pagina:
Se vedi la pagina di benvenuto, saprai che Nginx funziona correttamente!
Come gestire Nginx
Adesso vediamo alcuni comandi di base per gestire Nginx.
Per fermare il server web, possiamo usare:
sudo systemctl stop nginx
Possiamo invece avviare il server fermato in precedenza con:
sudo systemctl start nginx
Infine, per riavviare il server, quindi fermarlo e poi avviarlo, possiamo usare:
sudo systemctl reload nginx
La configurazione predefinita di Nginx prevede che il servizio venga automaticamente avviato all'avvio del server, possiamo modificare questo comportamento digitando:
sudo systemctl disable nginx
Per riabilitare l'avvio automatico del servizio, possiamo digitare:
sudo systemctl enable nginx
Impostare i Blocchi dei Server
Quando lavoriamo con Nginx, abbiamo a disponsizione i blocchi dei server, simili agli host virtuali di Apache, che possono essere utilizzati per hostare più domini o sottodomini su un singolo server.
In questa guida andremo a configurare il dominio example.com
, ma voi dovreste ovviamente utilizzare il vostro dominio al posto di quello di esempio.
Su Ubuntu, Nginx mette a disposizione un blocco server predefinito che è configurato per mostrare ai visitatori i documenti contenuti nella directory /var/www/html
. Anche se questo è un ottimo sistema per un singolo sito, la situazione diventa più problematica quando vogliamo hostare più siti. Quindi invece di andare a modificare quel file, creiamo delle nuove cartelle in /var/www
per il nostro dominio example.com, lasciando la directory predefinita come pagina da mostrare agli utenti nel caso provino a connettersi ad un sito inesistente.
Creiamo la cartella per il nostro dominio example.com con la flag -p
per creare anche eventuali parent directory necessarie:
sudo mkdir -p /var/www/example.com/html
Poi, assegnamo la proprietà della directory utilizzando la variabile d'ambiente $USER
:
sudo chown -R $USER:$USER /var/www/example.com/html
I permessi della cartella dovrebbero consentire al proprietario di leggere, scrivere ed eseguire i file, mentre agli altri utenti o ai gruppi solamente di leggere ed eseguire i file. Per assicuraci che sia effettivamente così, possiamo eseguire il seguente comando:
sudo chown -R 775 /var/www/example.com
A questo punto siamo pronti per creare una pagina index.html
di esempio, utilizzando nano o un qualsiasi editor di testo:
nano /var/www/example.com/html/index.html
All'interno possiamo scrivere il codice della nostra pagina HTML, per esempio:
<!DOCTYPE html>
<html>
<head>
<title>Benvenuto sul sito!</title
</head>
<body>
<h1>Benvenuto!</h1>
<p>Il tuo server block è stato configurato con successo.</p>
</body>
</html>
Per salvare e chiudere il file quando abbiamo finito premiamo i tasti Ctrl e X, poi Y e infine Invio.
Adesso, per consentire a Nginx di servire questo contenuto, è necessario creare un blocco server con le corrette informazioni. Invece di andare a modificare la configurazione predefinita, andremo a creare un nuovo file al percorso /etc/nginx/sites-available/example.com/
in questo modo:
sudo nano /etc/nginx/sites-available/example.com
All'interno del file possiamo configurare il nostro blocco in un modo simile al file predefinito, ma con il nostro dominio e il percorso corretto:
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html
index index.html index.html index.nginx-debian.html
server_name example.com www.example.com;
location / {
try_files $uri $uri/ = 404;
}
}
Nella configurazione abbiamo modificato il parametro root
inserendo il percorso della nostra nuova cartella, inoltre abbiamo inserito il nostro dominio su server_name
.
Siamo ora pronti per rendere operativa questa configurazione creando un collegamento nella cartella sites-enabled
, da cui Nginx legge le configurazioni all'avvio. Per farlo digitiamo:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
A questo punto abbiamo due server blocks operativi e configurati per rispondere alle richieste in base alle impostazioni di listen e di server_name.
- Il file example.com risponderà alle richieste effettuate a example.com e a www.example.com.
- Il file default risponderà a qualsiasi richiesta sulla porta 80 che non corrisponde a nessun altro blocco.
Per evitare un possibile problema legato all'hash bucket memory che potrebbe essere causato dall'aggiungere più server name, è necessario modificare un valore nel file di configurazione di Nginx. Per aprirlo usiamo:
sudo nano /etc/nginx/nginx.conf
Nel file dobbiamo trovare il parametro server_names_hash_bucket_size
e scommentare la riga rimuovendo il cancelletto (#) all'inizio. Se stai usando nano puoi cercare le parole nel file premendo Ctrl e W.
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
Terminata questa piccola modifica possiamo salvare e chiudere il file.
Prima di riavviare Nginx dobbiamo assicurarci che la configurazione sia valida e non siano presenti errori di sintassi. Per verificarla usiamo:
sudo nginx -t
Se non ci sono errori, riavviamo Nginx per rendere effettivi i nostri cambiamenti con:
sudo systemctl restart nginx
Nginx a questo punto dovrebbe mostrare i file corretti agli utenti che si collegano al nostro dominio. Possiamo provare digitando nella barra del nostro browser example.com, e se tutto è andato a buon fine dovremmo vedere la pagina HTML che abbiamo scritto in precedenza:
File e Cartelle importanti di Nginx
Ora che abbiamo visto come gestire Nginx e come configurare un blocco per il nostro dominio, iniziamo a familiarizzare con alcuni file e directory importanti.
Contenuti
/var/www/html
: qui si trova il contenuto vero e proprio del sito. Inizialmente è prsente solamente la pagina di benvenuto di Nginx. Il percorso può essere cambiato modificando la configurazione.
Configurazione del Server
/etc/nginx
: a questo percorso troviamo tutti i file di configurazione di Nginx./etc/nginx/nginx.conf
questo è il file di configurazione di Nginx. Può essere modificato per alterare la configurazione principale di Nginx, con effetto su tutto il server./etc/nginx/sites-available
: in questa cartella possono essere salvati i blocchi dei vari server per i siti web. Nginx non utilizzerà i file di configurazione presenti in questa cartella a meno che non sia presente un collegamento nella cartellasites-enabled
. Normalmente, la configurazione dei blocchi dei server viene effettuata in questa cartella, e poi i file vengono collegati all'altra.etc/nginx/sites-enabled
: in questa cartella sono contenuti i blocchi dei server per i siti web. I file presenti in questa cartella sono tipicamente collegamenti ai file di configurazione salvati nella cartellasites-available
./etc/nginx/snippets
: questa cartella contiene frammenti di confiurazione che possono essere inclusi in altri file di configurazione di Nginx. Le parti di configurazione che potrebbe essere necessario ripetere, possono andare a formare gli snippets.
Logs dei Server
/var/log/nginx/access.log
: ogni richiesta effettuata al tuo server web viene registrata in questo file (salvo modifiche di configurazione)./var/log/nginx/error.log
: tutti gli errori di Nginx vengono registrati in questo file.
Conclusione
Ora che abbiamo visto come installare, configurare e gestire Nginx, puoi decidere di hostare qualsiasi tipo di contenuto sul tuo server, utilizzando anche diverse tecnologie, in base a quello che desideri offrire.