Cos’è Nginx?

Nginx è un web server open source molto utilizzato in ambiente Linux.

Oltre a pubblicare siti web, Nginx viene spesso utilizzato come reverse proxy, ovvero come punto di ingresso unico per diversi servizi.

In pratica, invece di esporre direttamente ogni applicazione verso internet, tutte le richieste vengono ricevute da Nginx, che successivamente le inoltra al servizio corretto.

Esempio:

                Internet

                   |
                   |
              Nginx Proxy Manager

          -----------------------
          |          |          |
      Vaultwarden  Nextcloud  Grafana

Perché Nginx Proxy Manager?

Configurare Nginx manualmente richiede la modifica dei file di configurazione e una buona conoscenza della sua sintassi.

Nginx Proxy Manager semplifica questa gestione fornendo un’interfaccia grafica attraverso la quale è possibile creare reverse proxy, gestire domini e configurare certificati HTTPS senza modificare manualmente i file di Nginx.

I principali vantaggi sono:

  • Interfaccia grafica: gestione semplice tramite dashboard web.
  • Certificati SSL automatici: integrazione con Let’s Encrypt per HTTPS.
  • Gestione centralizzata: permette di pubblicare più servizi tramite un unico punto di accesso.
  • Configurazione semplificata: non è necessario scrivere manualmente le configurazioni Nginx.

Requisiti

Prima di procedere assicurati di avere:

  • Un server con indirizzo IP pubblico statico (necessario se vuoi pubblicare servizi su internet);
  • Un dominio o un sottodominio (necessario se vuoi pubblicare servizi su internet);
  • Docker e Docker Compose installati;
  • Le porte 80 e 443 disponibili;

Installazione

In questa guida utilizzeremo Docker Compose per installare Nginx Proxy Manager in modo semplice, ordinato e facilmente aggiornabile.

Accedi al tuo server e crea la cartella persistente che conterrà il file compose.yaml e le varie configurazioni per nginx-proxy-manager, per praticità crea una directory data

Esegui sul terminale:

1
sudo mkdir -p /data/nginx-proxy-manager

Assegna il ruolo di proprietario al tuo utente:

1
sudo chown -R ${USER}:${USER} /data/nginx-proxy-manager

Recati sulla cartella appena creata e crea il file di configurazione:

1
2
3
cd /data/nginx-proxy-manager

nano compose.yaml

Incolla all’interno la seguente configurazione e salva il file:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '443:443'
      - '81:81'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Adesso puoi effettuare il download dell’immagine:

1
docker compose pull

pulling-npm

Avvia il container con:

1
docker compose up -d

Firewall

E’ sempre consigliato installare un firewall per limitare le connessioni in ingresso al server:

Esegui:

1
sudo apt-get install ufw

Imposta i criteri predefiniti. Nega tutto ciò che entra e permetti tutto quello che esce:

1
2
3
sudo ufw default deny incoming

sudo ufw default allow outgoing

Se accedi al tuo server via ssh ricorda di inserire la regola per aprire la porta ssh:

1
sudo ufw allow ssh

Imposta l’apertura delle porta 80, 81 e 443 per Nginx Proxy Manager:

1
2
3
sudo ufw allow 80,443/tcp comment 'Nginx Proxy Manager'

sudo ufw allow 81/tcp comment 'Nginx Proxy Manager - UI'

Applica le modifiche con:

1
sudo ufw enable

Prima di abilitare il firewall assicurati sempre di aver consentito l’accesso SSH, altrimenti potresti perdere la connessione al server.

Configurazione

Accedi col tuo browser all’indirizzo http://IP_del_SERVER:81:

login-npm

Inserisci i dati richiesti (Nome ed indirizzo email) e procedi creando una password forte.

Dominio Web

Se la tua intenzione è quella di esporre i tuoi servizi online (es. Vaultwarden, Gotify ecc.) dovrai far puntare tutto il traffico “dominio.com” e/o “*.dominio.com” all’indirizzo IP del server dove si trova NPM, per farlo dovrai registrare due record di tipo “A” che puntino all’indirizzo IP del tuo server:

Tipo    Nome              Valore

A       dominio.com       IP_DEL_SERVER
A       *.dominio.com     IP_DEL_SERVER

Creato il record DNS sul tuo registrar torna su NPM e crea il tuo primo Proxy Host, accedi all’omonima sezione e clicca su “Add Proxy Host” e completa le voci così come da esempio:

  • Domain Names: nginx.dominio.com
  • Scheme: http (perché in questo esempio il servizio è esposto sullo schema http)
  • Forward Hostname / IP: dobbiamo inserire l’indirizzo IP del nostro server, oppure 127.0.0.1
  • Forward Port: dobbiamo inserire la porta nella quale è esposto il servizio in questo caso 81
  • Spunta le caselle Block Common Exploits e Websockets Support

Recati nella sezione SSL e su “SSL Certificate” clicca dal menù a tendina “Request a new SSL Certificate”, clicca sulle voci Force SSL, HTTP/2 Support, HSTS Enabled e HSTS Subdomains e clicca su “Save”

Adesso puoi accedere alla Web UI di Nginx Proxy Manager attraverso https://nginx.dominio.com con connessione sicura e crittografata HTTPS.

Effettuato l’accesso puoi eliminare il record del firewall dell’apertura della porta 81/tcp, esegui sul terminale:

1
sudo ufw verbose numbered

Dalla lista cerca la voce col commento impostato in precedenza “Nginx Proxy Manager - UI” annota il numero (es. 3) ed eliminala con:

1
sudo ufw delete 3

Da questo momento la gestione di Nginx Proxy Manager sarà accessibile esclusivamente tramite il dominio configurato.