Guida completa all’installazione e configurazione di Nginx su Ubuntu [per principianti]

Che cos’è Nginx?

Nginx (pronunciato “engine-x”) è un server HTTP ad alte prestazioni e un server proxy inverso. È ampiamente utilizzato in tutto il mondo per il suo design leggero e la sua flessibilità, soprattutto per la capacità di gestire carichi di traffico elevati.

Vantaggi dell’utilizzo di Nginx su Ubuntu

Ubuntu è una distribuzione Linux molto diffusa che funziona bene con Nginx. Grazie al suo sistema di gestione dei pacchetti (APT), installare e aggiornare Nginx è semplice, e offre eccellente stabilità e sicurezza.

Leggendo questo articolo, imparerai:

  • Come installare Nginx su Ubuntu
  • Procedura di configurazione e gestione di base
  • Ottimizzazione delle prestazioni e risoluzione dei problemi

Ora, iniziamo.

Verifica dei pacchetti richiesti

Prima di avviare l’installazione, assicurati che il tuo sistema sia aggiornato eseguendo i seguenti comandi:

sudo apt update
sudo apt upgrade

Installare Nginx

Per installare Nginx, inserisci il seguente comando:

sudo apt install nginx

Questo comando scarica e installa automaticamente Nginx dal repository APT di Ubuntu.

Verifica dell’installazione

Per verificare se l’installazione è avvenuta con successo, usa il comando seguente per controllare lo stato di Nginx:

sudo systemctl status nginx

Se l’output mostra “active (running)”, l’installazione è avvenuta con successo.

Configurazione del firewall

Ubuntu include UFW (Uncomplicated Firewall), che puoi usare per consentire il traffico Nginx.

sudo ufw allow 'Nginx Full'
sudo ufw enable

Ora, Nginx è configurato per operare sulle porte 80 (HTTP) e 443 (HTTPS).

File di configurazione e struttura di base

I principali file di configurazione di Nginx si trovano in:

  • Main configuration file: /etc/nginx/nginx.conf
  • File di configurazione specifici del sito: All’interno della directory /etc/nginx/sites-available/

Tipicamente, si crea un file di configurazione di un host virtuale in sites-available e si crea un collegamento simbolico a sites-enabled per l’attivazione.

Configurare un Virtual Host

I virtual host consentono di gestire più domini o progetti su un unico server. Il seguente esempio imposta example.com:

sudo nano /etc/nginx/sites-available/example.com

Inserisci il seguente contenuto:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

Salva il file e attiva la configurazione con i seguenti comandi:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Configurazione SSL/TLS

Per abilitare la comunicazione sicura, configura un certificato SSL/TLS. Puoi utilizzare Let’s Encrypt per ottenere un certificato gratuito.

Prima, installa certbot:

sudo apt install certbot python3-certbot-nginx

Successivamente, esegui il comando seguente per ottenere e configurare automaticamente il certificato SSL:

sudo certbot --nginx -d example.com -d www.example.com

Per evitare la scadenza, configura anche il rinnovo automatico del certificato.

Comandi base di Nginx

Su Ubuntu, puoi gestire Nginx usando il comando systemctl . Ecco le operazioni principali:

  1. Avvia Nginx
sudo systemctl start nginx
  1. Ferma Nginx
sudo systemctl stop nginx
  1. Riavvia Nginx
    Richiesto quando si apportano modifiche importanti alla configurazione.
sudo systemctl restart nginx
  1. Ricarica Nginx
    Applica le modifiche di configurazione senza riavviare.
sudo systemctl reload nginx
  1. Verifica lo stato di Nginx
    Verifica se Nginx è in esecuzione correttamente.
sudo systemctl status nginx

Abilitare l’avvio automatico

Per garantire che Nginx si avvii automaticamente dopo un riavvio del sistema:

  1. Abilita l’avvio automatico
sudo systemctl enable nginx
  1. Disabilita l’avvio automatico (se necessario)
sudo systemctl disable nginx

Controllare i log per la risoluzione dei problemi

Se Nginx non funziona come previsto, controlla i log per trovare la causa.

  1. Visualizza i registri degli errori
sudo tail -f /var/log/nginx/error.log
  1. Visualizza i registri di accesso
sudo tail -f /var/log/nginx/access.log

Apertura delle porte con UFW

UFW (Uncomplicated Firewall) è uno strumento firewall incluso di default in Ubuntu. Per garantire il corretto funzionamento di Nginx, è necessario aprire le porte 80 (HTTP) e 443 (HTTPS).

  1. Verifica lo stato corrente di UFW
sudo ufw status
  1. Consenti traffico Nginx
    Esegui il seguente comando per aprire le porte necessarie:
sudo ufw allow 'Nginx Full'
  1. Abilita UFW
    Se il firewall è disabilitato, abilitalo:
sudo ufw enable

Miglioramenti aggiuntivi della sicurezza

  1. Disabilita i metodi HTTP non necessari
    Per aumentare la sicurezza, disabilita i metodi HTTP non necessari aggiungendo quanto segue al file di configurazione di Nginx:
if ($request_method !~ ^(GET|POST|HEAD)$) {
    return 444;
}
  1. Disabilita l’elenco delle directory
    Previeni che i contenuti della directory siano accessibili pubblicamente aggiungendo:
autoindex off;
  1. Potenzia SSL/TLS
    Usa impostazioni di cifratura forti nella tua configurazione SSL:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;

Ottimizzazione delle prestazioni

1. Configurazione dei processi worker

Nginx utilizza un’architettura multiprocesso. Impostare un numero adeguato di processi worker ottimizza le prestazioni.

Modifica il file di configurazione /etc/nginx/nginx.conf e imposta:

worker_processes auto;

L’impostazione “auto” regola automaticamente il numero di processi worker in base ai core della CPU.

2. Aumentare le connessioni dei worker

Per impostazione predefinita, ogni processo worker ha un numero limitato di connessioni. Incrementare questo valore migliora la gestione di carichi di traffico elevati.

Aggiungi o modifica la seguente riga nel file di configurazione:

worker_connections 1024;

3. Abilitare HTTP/2

Abilitare HTTP/2 migliora l’efficienza della comunicazione e velocizza il caricamento del sito web.

Modifica il /etc/nginx/sites-available/example.com file e cambia la direttiva listen come segue:

listen 443 ssl http2;

Quindi ricarica Nginx:

sudo systemctl reload nginx

4. Abilitare la compressione dei contenuti

Comprimere i file prima di inviarli riduce l’uso della larghezza di banda e migliora i tempi di caricamento.

Aggiungi o abilita le seguenti impostazioni:

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

5. Configurare la cache

Configurare la cache riduce le richieste ripetute per le risorse statiche.

Aggiungi la seguente configurazione:

location ~* .(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ {
    expires 30d;
    access_log off;
}

Risoluzione dei problemi comuni

1. Gestione lenta delle richieste sotto carico elevato

  • Causa: Processi worker insufficienti o limiti di connessione.
  • Soluzione: Regola i processi worker e le connessioni, oppure considera l’uso di un bilanciatore di carico.

2. Errore “403 Forbidden”

  • Causa: Direttiva root errata nel file di configurazione o permessi del file errati.
  • Soluzione: Verifica la direttiva root e aggiorna i permessi del file:
sudo chmod -R 755 /var/www/example.com/html
sudo chown -R www-data:www-data /var/www/example.com/html

3. Problemi di timeout del server

  • Causa: Tempo di elaborazione della richiesta lungo.
  • Soluzione: Regola le impostazioni di timeout:
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;

4. Errori di riavvio di Nginx

  • Causa: Errori nel file di configurazione.
  • Soluzione: Verifica la configurazione prima di riavviare:
sudo nginx -t

Riepilogo dei punti chiave

1. Installazione di Nginx su Ubuntu

  • Ho preparato i pacchetti richiesti e installato Nginx usando APT.
  • Configurato il firewall per consentire il traffico Nginx.

2. Configurazione di base

  • Ho compreso la struttura del file di configurazione di Nginx e ho configurato host virtuali e SSL/TLS.

3. Gestione di Nginx

  • Ho imparato i comandi essenziali per avviare, fermare e ricaricare Nginx.
  • Verificati i log per la risoluzione dei problemi.

4. Miglioramenti della sicurezza

  • Configurato UFW e applicate impostazioni di sicurezza aggiuntive.

5. Ottimizzazione delle prestazioni e risoluzione dei problemi

  • Processi worker ottimizzati, abilitato HTTP/2 e impostata la cache.
  • Affrontati i problemi comuni di Nginx.

Prossimi Passi

Ora che hai le basi di Nginx su Ubuntu, considera i seguenti passaggi:

  • Impara configurazioni avanzate come bilanciamento del carico e proxy inverso.
  • Migliora la sicurezza con WAF e moduli di sicurezza aggiuntivi per Nginx.
  • Automatizza le distribuzioni con Ansible o Docker.
  • Monitora le prestazioni con strumenti come Prometheus e Grafana.

Applicando questi concetti, potrai gestire efficacemente un server web ad alte prestazioni con Nginx su Ubuntu.

侍エンジニア塾