NGINX è un web server open-source ampiamente utilizzato per servire contenuti statici. Grazie alla sua architettura efficiente e scalabile, è diventato una delle scelte più popolari per ospitare siti web, landing page e documentazione. Progettato per gestire migliaia di connessioni simultanee con un consumo di risorse minimo, rappresenta la soluzione ideale per chi cerca prestazioni elevate senza complessità.

Utilizzando l’immagine Docker nginx:alpine, si ottiene un container estremamente leggero (pochi MB) basato su Alpine Linux, perfetto per il self-hosting. Questa configurazione è ideale per servire siti statici HTML, portfolio personali, documentazione, landing page o qualsiasi contenuto che non richieda elaborazione server-side, database o CMS.

NGINX vs Apache: quale scegliere?

Per poter ospitare dei siti, è possibile utilizzare anche Apache HTTP Server . Anche se hanno scopi molto simili, questi possono essere utilizzati in modo differente in base alle proprie esigenze. Le caratteristiche principali sono riassunte nella tabella sotto, ma in sintesi: scegli NGINX se devi ospitare siti statici ad alte prestazioni in ambienti con risorse limitate. Scegli invece Apache se hai bisogno di .htaccess, vuoi ospitare applicazioni PHP tradizionali o usare un singolo container per ospitare più siti (hosting condiviso).

Scenario Apache NGINX
Siti statici semplici SI CONSIGLIATO
Applicazioni PHP (WordPress, Laravel) CONSIGLIATO SI
Configurazioni per-directory (.htaccess) CONSIGLIATO NO
Risorse limitate (RAM/CPU) SI CONSIGLIATO
Alto traffico / molte connessioni SI CONSIGLIATO
Reverse proxy / Load balancer SI CONSIGLIATO
Hosting condiviso CONSIGLIATO SI
Moduli dinamici a runtime CONSIGLIATO NO

Processo di Installazione

Dopo aver installato Docker Engine e Docker Compose, è possibile procedere con il deploy del web server NGINX.

Il file docker-compose.yml qui sotto configura un unico servizio (website_personal) e non richiede variabili d’ambiente o configurazioni particolari. L’unica accortezza è la creazione della cartella website che conterrà i file del sito statico, mappata sul volume /usr/share/nginx/html del container. La porta 8010 dell’host viene esposta per accedere al sito tramite browser.

yaml
  website_personal:
    image: nginx:alpine
    container_name: website_personal
    restart: always
    volumes:
      - ./website:/usr/share/nginx/html
    ports:
      - "8010:80"
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:80/"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s

All’interno della configurazione è presente anche un blocco healthcheck che verifica periodicamente il corretto funzionamento del servizio. Ogni 30 secondi Docker invia una richiesta HTTP alla porta 80 del container e, se il web server risponde correttamente, lo stato viene segnato come healthy. In caso di tre tentativi consecutivi falliti, il container viene marcato come unhealthy, permettendo di individuare rapidamente eventuali problemi.

Avvio del Container

Per avviare il container, spostarsi nella directory contenente il file docker-compose.yml ed eseguire il seguente comando:

bash
docker-compose up -d --build

Questo comando avvia il servizio in modalità detached, consentendo di funzionare in background. Una volta avviato, il sito sarà accessibile all’indirizzo http://<indirizzo_IP_server>:8010.

Può capitare che la cartella website venga creata con permessi di root, impedendo il caricamento o la modifica dei file. In questo caso è necessario cambiare il proprietario della cartella, assegnandola all’utente che gestisce il container:

bash
sudo chown -R utente:utente /home/utente/website/

Configurazione Comando

Sostituire utente con il proprio nome utente e verificare che il percorso corrisponda alla posizione effettiva della cartella website.

Troubleshooting & Consigli

Qui di seguito sono elencati i possibili problemi che si possono riscontrare nell’installazione o nell’utilizzo del container:

  • Pagina bianca o errore 403 Forbidden: Se accedendo al sito viene visualizzata una pagina bianca o un errore 403, il problema è quasi sempre legato alla mancanza del file index.html nella cartella website o a permessi insufficienti. Verificare che la cartella contenga almeno un file index.html e che i permessi siano corretti (permessi 644).
  • Il container non si avvia: Se il container non si avvia o si ferma immediatamente dopo l’avvio, la causa più comune è un conflitto di porte. La porta 8010 potrebbe essere già utilizzata da un altro servizio.
  • Le modifiche ai file non sono visibili: Dopo aver modificato i file nella cartella website, le modifiche potrebbero non essere immediatamente visibili nel browser. Prima di tutto, svuotare la cache del browser o provare in modalità incognito.
  • Per migliorare la stabilità consiglio di andare ad utilizzare una versione “statica” come ad esempio 1.28 o stable-alpine, in modo da non creare problemi durante eventuali aggiornamenti automatici.

Prossimi Passi

Ora che il tuo sito è online all’interno della rete locale, potresti volerlo esporre su internet in modo sicuro (tramite HTTPS). Per farlo, ti consigliamo di configurare un reverse proxy. Puoi seguire la nostra guida su NGINX Proxy Manager o Caddy .