Tutorial > Come installare un web server NGINX su Ubuntu 20.04

Come installare un web server NGINX su Ubuntu 20.04

Pubblicato il: 21 agosto 2020

NGINX Ubuntu Web Server

NGINX è un server web dalle alte prestazioni impiegato soprattutto per gestire i file statici e come reverse proxy, ma grazie alla sua versatilità può essere utilizzato in qualsiasi tipo di situazione. In questa guida vedrai come installarlo sul tuo server e come configurarlo per due o più domini.

Per prima cosa dovrai connetterti al tuo server tramite una connessione SSH. Se non l’hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH. In caso di server locale puoi passare al punto successivo e aprire il terminale del tuo server.

Installazione di NGINX

Aggiorna i repository della distribuzione, per essere sicuro di scaricare la versione più aggiornata di NGINX:

$ sudo apt update

Lancia il seguente comando per installare il pacchetto NGINX:

$ sudo apt install nginx

Una volta completata l’installazione puoi lanciare il servizio e installarlo sul sistema:

$ sudo systemctl start nginx

$ sudo systemctl enable nginx

Configurazione del Firewall

Se sul tuo sistema è presente un firewall allora dovrai impostarlo per abilitare il traffico HTTP e il traffico HTTPS verso la tua macchina.

Nel caso in cui tu utilizzassi il firewall UFW, avrai a disposizione dei profili preinstallati per NGINX. Vediamo quindi come abilitarli.

Per verificare i profili disponibili installati nel firewall UFW esegui questo comando:

$ sudo ufw app list

Verrà mostrata a schermo una lista simile a questa:

Available applications:

  Dovecot IMAP

  Dovecot POP3

  Dovecot Secure IMAP

  Dovecot Secure POP3

  Nginx Full

  Nginx HTTP

  Nginx HTTPS

  OpenSSH

  Postfix

  Postfix SMTPS

  Postfix Submission

Per consentire il traffico HTTP (Porta 80) e HTTPS (Porta 443), dovrai utilizzare il profilo "Nginx Full". 

Puoi verificare le informazioni del profilo in questo modo:

$ sudo ufw app info "Nginx Full"

Apparirà la descrizione del profilo a schermo:

Profile: Nginx Full

Title: Web Server (Nginx, HTTP + HTTPS)

Description: Small, but very powerful and efficient web server
                Ports:

  80,443/tcp

Dopo aver verificato il profilo sarai pronto a abilitarlo:

$ sudo ufw allow in "Nginx Full"

A questo punto la configurazione di NGINX e del firewall è completata e puoi testare il web server visitando l'indirizzo http://<IP.DEL.SERVER> o nel caso di server locale http://localhost. Se la procedura é stata eseguita correttamente verrà mostrata la schermata di default di NGINX.

Benvenuto in NGINX

Configurare correttamente due domini / siti web:

Di seguito vedremo come configurare due host virtuali (chiamati “server block”) in modo da avere due spazi web completamente separati. In questo esempio utilizzeremo due domini di fantasia:

  • www.miodominio.it

  • www.tuodominio.it

Entrambi i record A devono necessariamente puntare all’indirizzo IP pubblico del tuo server.

Inizia con il creare tutte le cartelle necessarie per contenere i file pubblici dei tuoi siti web:

$ sudo mkdir /var/www

$ sudo mkdir /var/www/tuodominio.it

$ sudo mkdir /var/www/tuodominio.it/htdocs

$ sudo mkdir /var/www/tuodominio.it/logs
                $ sudo mkdir /var/www/miodominio.it

$ sudo mkdir /var/www/miodominio.it/htdocs

$ sudo mkdir /var/www/miodominio.it/logs

Come contenuti temporanei, dovrai copiare la pagina di default di NGINX nelle cartelle htdocs di ogni dominio:

$ sudo cp /usr/share/nginx/html/* /var/www/tuodominio.it/htdocs/

$ sudo cp /usr/share/nginx/html/* /var/www/miodominio.it/htdocs/

Adesso puoi procedere alla configurazione di NGINX vera e propria. Normalmente NGINX legge tutti i file di .conf presenti nella directory /etc/nginx/conf.d/, quindi prosegui creando due file (uno per dominio) e chiamandoli:

  • tuodominio_it.conf

  • miodominio_it.conf

Utilizza il tuo editor di testo preferito per scrivere la seguente configurazione nel file tuodominio_it.conf:

server {
                        #Porta di ascolto sul server

        listen 80;
                        # Domini ed eventuali alias che devono utilizzare questa configurazione

        server_name tuodominio.it *.tuodominio.it;
                        # Cartella di base che deve essere utilizzata come root principale

        root /var/www/tuodominio.it/htdocs;
                        # Files di log per accessi ed eventuali errori per questo domino

        access_log /var/www/tuodominio.it/logs/access.log main;

        error_log /var/www/tuodominio.it/logs/error.log warn;

}

Ovviamente devi utilizzare una configurazione simile anche per miodominio_it.conf: 

server {
                        #Porta di ascolto sul server

        listen 80;
                        # Domini ed eventuali alias che devono utilizzare questa configurazione

        server_name miodominio.it *.miodominio.it;
                        # Cartella di base che deve essere utilizzata come root principale

        root /var/www/miodominio.it/htdocs;
                        # Files di log per accessi ed evenutali errori per questo domino

        access_log /var/www/miodominio.it/logs/access.log main;

        error_log /var/www/miodominio.it/logs/error.log warn;

}

Oltre ad aver impostato la cartella principale per i file del dominio virtuale, sono presenti delle impostazioni per configurare i percorsi dei file di log (sia di accesso che di errore) in modo da avere un log per dominio. Normalmente NGINX salva tutti i log all’interno della directory /var/log/nginx/ ma in caso di multidominio, il risultato potrebbe essere confusionario.

Una conseguenza del cambiare il percorso dei log è che potrebbero diventare troppo grandi nel tempo. Risulta quindi necessario impostare una rotazione dei file in modo da eliminare i contenuti più vecchi. Per farlo puoi utilizzare il software logrotate.

Per aggiungere dei nuovi file di log nelle impostazioni di logrotate puoi modificare il file  /etc/etc/logrotate.d/nginx:

/var/log/nginx/*log {

    create 0644 nginx nginx

    daily

    rotate 10

    missingok

    notifempty

    compress

    sharedscripts

    postrotate

        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true

    endscript

}

Come puoi notare è già presente una configurazione per i file di NGINX presenti in /var/log/nginx. Procedi quindi modificando la prima parte del file come segue:

/var/log/nginx/*log

/var/www/*/logs/* {

    ...

}

Apportata questa modifica, logrotate gestirà tutti i file presenti nelle cartelle logs sia di /var/www/miodominio.it che di /var/www/tuodominio.it (e altri eventuali), senza doverci preoccupare nel caso in cui vengano aggiunti altri domini in futuro.

Una volta completato, riavviamo il servizio per apportare le modifiche:

$ sudo systemctl reload nginx