Nginx su Linux — Installazione, Virtual Host, SSL e Performance per PMI Italiane
> cd .. / HUB_EDITORIALE > Visualizza in Inglese
Sistemi Operativi & Sicurezza

Nginx su Linux — Installazione, Virtual Host, SSL e Performance per PMI Italiane

[2026-07-18] Author: Ing. Calogero Bono
> condividi
Zenithby Meteora Web Il sistema operativo della tua attività. Social, clienti, prenotazioni e fatture in un'unica piattaforma. Palestre, barber, professionisti. Scopri Zenith Demo gratis · senza carta

Il tuo server web risponde lento? I certificati SSL scadono senza che te ne accorga? I virtual host ti sembrano un rebus?

Noi vediamo ogni giorno realtà che perdono clienti perché il sito impiega 4 secondi a caricare la prima riga, o magari perché un rinnovo SSL non automatizzato manda tutto offline per ore. Poi arriva la telefonata: "Meteora, il sito non funziona".

Nginx non è solo un web server veloce e leggero — è la scelta giusta per chi vuole controllo, sicurezza e performance senza spendere una fortuna in licenze. In questa guida ti portiamo dall'installazione su Linux (Ubuntu/Debian) alla configurazione di virtual host, SSL con Let's Encrypt e ottimizzazioni base per tenere il sito scattante. Nessuna teoria astratta: solo comandi che puoi copiare, incollare e testare subito.

Perché Nginx è la scelta migliore per il tuo server Linux?

La differenza principale tra Nginx e Apache la puoi raccontare con un esempio: Apache crea un nuovo processo per ogni connessione, Nginx invece gestisce migliaia di connessioni con un unico thread event-driven. Tradotto: Nginx consuma meno RAM e regge più traffico simultaneo. Per una PMI che ha un e-commerce su WooCommerce o un portale B2B, questo significa risparmiare sul costo del server e non andare in crash durante i picchi.

Noi abbiamo scelto Nginx per tutti i progetti da zero, sia su stack LEMP (Linux Nginx MySQL PHP) che per piattaforme Laravel. Quando un cliente arriva da noi con Apache, spesso la prima ottimizzazione che facciamo è migrare a Nginx: i tempi di risposta calano del 30-50% senza toccare una riga di codice applicativo.

In più, Nginx ha un sistema di virtual host chiarissimo — file di configurazione separati per dominio, nessuna confusione con .htaccess (che infatti non supporta, e meno male).

Sponsored Protocol

Come installare Nginx su Ubuntu Server?

Partiamo da una VM o VPS con Ubuntu 22.04 o 24.04. Apri il terminale e aggiorna i pacchetti:

sudo apt update && sudo apt upgrade -y

Poi installa Nginx:

sudo apt install nginx -y

Al termine, avvia e abilita all'avvio:

sudo systemctl start nginx
sudo systemctl enable nginx

Controlla che sia attivo:

sudo systemctl status nginx

Apri il browser e visita l'indirizzo IP del server. Dovresti vedere la pagina di default di Nginx. Se non la vedi, controlla il firewall — su Ubuntu di solito ufw è disattivo, ma se hai un VPS di un provider come DigitalOcean o Aruba, potresti dover aprire le porte 80 e 443.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

Errore comune: credere che "nginx -t" basti. In realtà serve a testare la sintassi della configurazione, ma non avvia il server. Ricorda sempre di fare systemctl reload o restart dopo ogni modifica.

Come configurare i virtual host (server block) su Nginx?

Nginx chiama i virtual host server block. Ogni dominio (es. miosito.it e admin.miosito.it) avrà un file separato nella directory /etc/nginx/sites-available/. Poi lo attivi con un link simbolico in /etc/nginx/sites-enabled/.

Creare un server block per un dominio semplice (sito statico o PHP)

Supponiamo che il tuo dominio sia esempio.it e i file del sito siano in /var/www/esempio.it/html. Crea la directory:

sudo mkdir -p /var/www/esempio.it/html
sudo chown -R www-data:www-data /var/www/esempio.it

Ora crea il file di configurazione:

sudo nano /etc/nginx/sites-available/esempio.it

E inserisci:

Sponsored Protocol

server {
    listen 80;
    server_name esempio.it www.esempio.it;
    root /var/www/esempio.it/html;
    index index.html index.php index.htm;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
    }
}

Attiva il sito:

sudo ln -s /etc/nginx/sites-available/esempio.it /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Attenzione: il percorso di fastcgi_pass dipende dalla versione di PHP installata. Se hai PHP 8.1, sarà php8.1-fpm.sock. Verifica con ls /var/run/php/.

Se non usi PHP (sito statico), puoi eliminare il blocco location ~ \.php$.

Virtual host con sottodominio

Stessa procedura, ma nel server_name metti admin.esempio.it e crei una directory separata. Puoi avere quanti server block vuoi, ognuno col suo contenuto.

Errore comune: dimenticare di rimuovere il default link simbolico /etc/nginx/sites-enabled/default se non lo usi. Altrimenti Nginx farà match con quello e il tuo dominio potrebbe non funzionare. Disabilitalo con sudo rm /etc/nginx/sites-enabled/default.

Come abilitare SSL su Nginx con Let's Encrypt (certificato gratuito)?

Niente scuse per non avere HTTPS. Let's Encrypt è gratuito e con Certbot l'installazione è automatica. Noi lo facciamo su ogni progetto — un cliente che vende online senza SSL oggi è come un negozio con la saracinesca alzata ma senza porta.

Installare Certbot e ottenere il certificato

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d esempio.it -d www.esempio.it

Certbot modifica automaticamente il tuo server block, aggiungendo la direttiva listen 443 ssl e il reindirizzamento da HTTP a HTTPS. Ti chiederà un indirizzo email per le notifiche di rinnovo (obbligatorio).

Sponsored Protocol

Il certificato è valido 90 giorni. Per il rinnovo automatico, Certbot aggiunge un timer systemd. Verifica con:

sudo systemctl status certbot.timer

Puoi testare il rinnovo in modalità dry-run:

sudo certbot renew --dry-run

Attenzione: se il tuo sito non è ancora raggiungibile pubblicamente (es. in fase di sviluppo su IP locale), Let's Encrypt non può validare il dominio. Allora usa certificati autofirmati per i test, ma mai in produzione.

Configurazione SSL manuale (se preferisci il controllo)

Se vuoi personalizzare i parametri SSL (es. disabilitare protocolli obsoleti, forzare HSTS), modifica direttamente il server block dopo aver ottenuto il certificato:

server {
    listen 443 ssl http2;
    server_name esempio.it www.esempio.it;
    root /var/www/esempio.it/html;

    ssl_certificate /etc/letsencrypt/live/esempio.it/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/esempio.it/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

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

Poi non dimenticare di fare reload: sudo systemctl reload nginx.

Come ottimizzare Nginx per migliorare le performance?

Una volta che il server è su e HTTPS funziona, possiamo rendere il sito più veloce senza cambiare una riga di PHP o HTML.

Sponsored Protocol

Compressione gzip

Abilita la compressione dei file testuali (HTML, CSS, JS, JSON). Nel file /etc/nginx/nginx.conf dentro il blocco http:

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

Poi ricarica Nginx. Impatto immediato: il peso delle risorse scende del 50-70%.

Cache delle risorse statiche

Imposta header di cache per immagini, font, CSS, JS che non cambiano spesso. Aggiungi nel server block (o in un file separato):

location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|svg|webp|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

Attenzione: non usare expires 1y per file che aggiorni frequentemente senza cambiare nome. Meglio versionare con hash nel nome del file.

Limitazione delle richieste

Proteggi il server da attacchi semplici con limit rate. Nel contesto http:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

Poi applicalo a location specifiche, es. login o API:

location /api/ {
    limit_req zone=mylimit burst=20 nodelay;
    ...
}

Non fermerà un attacco DDoS serio, ma blocca i tentativi di brute force e i crawler malevoli.

Worker processes e connection

Modifica /etc/nginx/nginx.conf in base al numero di CPU del server. Di solito:

worker_processes auto;
events {
    worker_connections 1024;
    multi_accept on;
    use epoll;
}

auto imposta worker_processes pari al numero di core. epoll è il metodo di I/O più efficiente su Linux.

Come testare e monitorare le performance di Nginx?

Dopo ogni modifica, verifica con strumenti semplici ma efficaci:

Sponsored Protocol

  • nginx -t : controlla la sintassi della configurazione.
  • curl -I https://tuodominio.it : mostra gli header di risposta, utile per vedere se la cache e la compressione funzionano.
  • PageSpeed Insights o GTmetrix : misurano il tempo di caricamento da utente reale.
  • ab (Apache Bench) : test di carico veloce: sudo apt install apache2-utils && ab -n 1000 -c 50 https://tuodominio.it/

Noi, di Meteora Web, controlliamo sempre i log di Nginx quando un cliente segnala lentezza: /var/log/nginx/access.log e error.log. Un errore 502 spesso significa che PHP-FPM è morto per mancanza di memoria. Un 499 indica che il client ha chiuso la connessione — magari perché il server è troppo lento.

Cosa fare adesso

  1. Installa Nginx su un server di test (anche locale con Vagrant o Docker).
  2. Crea un virtual host per un dominio fittizio e metti dentro una pagina HTML di prova.
  3. Abilita HTTPS con Certbot — anche se il dominio non è reale, prova con un certificato autofirmato per capire il meccanismo.
  4. Applica le ottimizzazioni (gzip, cache, worker) e misura la differenza con GTmetrix.
  5. Leggi la nostra guida pillar su Linux per sviluppatori e sysadmin per approfondire shell, sicurezza e automazione: Linux per Sviluppatori e Sysadmin.

Se vuoi andare oltre, guarda la documentazione ufficiale di Nginx e il Mozilla SSL Configuration Generator per configurazioni SSL avanzate.

Hai già un sito in produzione? Controlla ora se il certificato è valido e se la compressione gzip è attiva. Se non sai da dove partire, contattaci — valutiamo il tuo setup e ti diamo un piano per mettere in sicurezza e velocizzare il server.

> condividi
Ing. Calogero Bono

> AUTHOR_EXTRACTED

Ing. Calogero Bono

Ingegnere informatico, fondatore di Meteora Web e Zenith OS. System administrator e progettista di piattaforme, app e CMS proprietari, con esperienza in sviluppo full-stack, marketing digitale ed ecosistema Google.
[ Read Full Dossier ]

> METEORA_WEB // WEB AGENCY

Costruiamo la presenza digitale che la tua azienda merita.

Siti web, social, pubblicità online, e-commerce e hosting performante: ingegnerizzati con metodo da ingegneri informatici a Sciacca, per tutta Italia.

> MW_JOURNAL

> READ_ALL()