
Gestire più servizi web sullo stesso server può diventare rapidamente complesso: tra configurazioni di reverse proxy, gestione dei certificati SSL, reindirizzamenti e sicurezza, un semplice file di configurazione Nginx può trasformarsi in un labirinto.
Ecco perché Nginx Proxy Manager (NPM) è diventato uno degli strumenti più apprezzati nella community dei sysadmin e degli appassionati di self-hosting.
In questo articolo vedremo come installare e configurare Nginx Proxy Manager passo dopo passo, scoprendo come semplificare la gestione dei tuoi proxy, ottenere certificati SSL automatici con Let’s Encrypt e monitorare i tuoi servizi attraverso una comoda interfaccia web.
PREREQUISITI
OS: Ubuntu 24.04
User con permessi sudo
AGGIORNAMENTO DEL SISTEMA
Aggiornare il sistema con i seguenti comandi:
|
0
1
|
sudo apt update
sudo apt upgrade -y
|
INSTALLAZIONE DI DOCKER E DOCKER COMPOSE
Installare Docker e Docker Compose con i seguenti comandi:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
|
CONFIGURAZIONE ACL DOCKER
Creare il gruppo se non esiste (di solito esiste già) con il comando:
|
0 |
sudo groupadd docker 2>/dev/null || true
|
Aggiungere il tuo utente al gruppo con il comando:
|
0 |
sudo usermod -aG docker $USER
|
Ricaricare i gruppi senza dover fare logout/login con il comando:
|
0 |
newgrp docker
|
Verificare che funzioni senza sudo con il comando:
|
0 |
docker ps
|
Quindi uscire e rientrare nella sessione
INSTALLAZIONE DI NGINX
Installare Nginx classico e spostarlo su porta 8080
Installare Nginx con il comando:
|
0 |
sudo apt install -y nginx
|
Modificare il sito di default con il comando:
|
0 |
sudo nano /etc/nginx/sites-available/default
|
Cercare le seguenti righe:
|
0
1
|
listen 80 default_server;
listen [::]:80 default_server;
|
e cambiarle in:
|
0
1
|
listen 8080 default_server;
listen [::]:8080 default_server;
|
Salvare e chiudere il file di configurazione
Controllare la configurazione di Nginx con il comando:
|
0 |
sudo nginx -t
|
Se è tutto OK dovremmo visualizzare il seguente output:
|
0
1
|
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
|
Ricaricare Nginx con il comando:
|
0 |
sudo systemctl reload nginx
|
Da questo momento Nginx è attivo sulla porta 8080
Verificare con il comando:
|
0 |
curl http://127.0.0.1:8080
|
Dovremmo visualizzare un output simile al seguente:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
|
PREPARAZIONE DI NGINX PROXY MANAGER CON DOCKER
Creare le cartelle per NPM con i seguenti comandi:
|
0
1
2
3
4
|
sudo mkdir -p /opt/npm/{data,letsencrypt}
sudo chown -R $USER:$USER /opt/npm
cd /opt/npm
|
Creare il file docker-compose.yml con il comando:
|
0 |
sudo nano docker-compose.yml
|
Incollare il seguente output:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # HTTP pubblico -> NPM
- '81:81' # GUI admin NPM
- '443:443' # HTTPS pubblico -> NPM
environment:
TZ: "Europe/Rome"
DB_SQLITE_FILE: "/data/database.sqlite"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
|
Salvare e chiudere il file di configurazione
Avviare NPM con i seguenti comandi:
|
0
1
|
cd /opt/npm
docker compose up -d
|
Se è tutto OK dovremmo vedere un output simile al seguente:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
✔ app Pulled 16.0s
✔ 4db4d3eb82e0 Pull complete 0.3s
✔ bf1d7c647280 Pull complete 0.3s
✔ ff9b534092e9 Pull complete 4.3s
✔ 5cb1c2b72507 Pull complete 8.4s
✔ 01eb57d811cf Pull complete 6.3s
✔ 78f53b68bcbf Pull complete 0.7s
✔ 2e3c087c7367 Pull complete 0.5s
✔ 4be11bb8bfc9 Pull complete 0.4s
✔ 08a02a673ea5 Pull complete 0.5s
✔ 4f4fb700ef54 Pull complete 0.6s
✔ 55de3e8ad0e7 Pull complete 0.6s
✔ dc2c878fe381 Pull complete 0.4s
✔ b0b6f3e0b21e Pull complete 14.3s
✔ 0f3b1ce15b4a Pull complete 0.6s
✔ 4d45a65e5aab Pull complete 0.5s
✔ 92a668a55f42 Pull complete 0.6s
✔ daa89247ee5d Pull complete 6.8s
✔ fcf0f2d531a3 Pull complete 0.7s
✔ d2e13e01b6f7 Pull complete 0.6s
✔ 846a40ae9eef Pull complete 0.6s
✔ 274e160f1cf5 Pull complete 0.6s
✔ 5fdf0b13175a Pull complete 0.5s
✔ d20d030334d5 Pull complete 12.9s
✔ 5571c42e96ba Pull complete 4.2s
✔ 0954b0833829 Pull complete 0.5s
✔ 8c5146056cb1 Pull complete 0.5s
✔ 340746fbba38 Pull complete 6.0s
✔ 1adabd6b0d6b Pull complete 3.1s
✔ 54893a8bc594 Pull complete 4.1s
✔ 68e5b7b8ded3 Pull complete 0.6s
✔ 7ba06c71e0b9 Pull complete 0.6s
✔ c761f312e5b7 Pull complete 8.7s
✔ 08fb3b22b5d5 Pull complete 0.6s
[+] Running 2/2
✔ Network npm_default Created 0.0s
✔ Container npm-app-1 Started
|
ACCESSO A NGINX PROXY MANAGER DA WEB GUI
Da un qualsiasi browser richiamare il link:
http://FQDD-SERVER-O-IP:81
Le credenziali di default sono le seguenti:
FULL NAME: Inserire il nome dell’amministratore
EMAIL ADDRESS: [email protected]
PASSWORD: changeme
Cliccare Save
Cliccare sull’utente in alto a destra quindi selezionare Change Password
Inserire la vecchia password quindi due volte la nuova e cliccare su Save
A questo punto cambiare la mail cliccando su Edit Profile
Modificare la mail quindi cliccare Save
A questo punto è possibile inserire regole all’interno del Reverse Proxy
DESCRIZIONE FUNZIONALITA’
Nginx Proxy Manager (NPM) è un’interfaccia web (GUI) che semplifica la gestione di proxy inversi basati su Nginx, con supporto integrato per SSL Let’s Encrypt, redirect, autenticazione e gestione multiutente.
In pratica: ti permette di configurare reverse proxy e certificati HTTPS senza scrivere manualmente file di configurazione Nginx.
⚙️ Funzionalità principali
1. Reverse Proxy con interfaccia web
Configura facilmente proxy verso servizi interni (es. https://plex.miodominio.it → 192.168.1.10:32400)
Supporta:
- HTTP / HTTPS
- WebSocket
- Headers personalizzati
- Reindirizzamenti 301 / 302
- Access list (ACL) con autenticazione HTTP base
Ideale per gestire più servizi self-hosted dietro un unico IP pubblico o server.
2. Gestione automatica dei certificati SSL (Let’s Encrypt)
Certificati automatici gratuiti e rinnovati automaticamente da Let’s Encrypt.
Supporta:
- Certificati “Single domain”, “Wildcard” (via DNS challenge)
- Importazione manuale di certificati personalizzati (.pem / .key)
- Notifiche sullo stato dei certificati.
Pro: tutto automatizzato.
Contro: wildcard DNS richiede API key del provider DNS (alcuni provider non supportati).
3. Redirect e Stream Proxy
Puoi creare redirect semplici (HTTP → HTTPS, dominio → dominio).
Supporta anche TCP/UDP Stream Proxy (utile per servizi non HTTP, come SSH, MQTT o database).
4. Autenticazione e Access Control
Autenticazione Basic Auth nativa (user/pass)
Liste di accesso:
- Allow list e Deny list per IP
- Autenticazione integrata per singoli proxy host
In combinazione con Nginx puoi anche configurare (manualmente via Custom Nginx Config) autenticazione avanzata, come OAuth2, SSO, ecc.
5. Gestione utenti e ruoli
Utenti multipli con ruoli:
- Admin: pieno controllo
- Manager: gestione proxy, ma non configurazione del sistema
- Viewer: sola lettura
6. DNS Challenge / Integrazione con provider DNS
Supporto per DNS Challenge (per ottenere certificati wildcard)
Integrazione con diversi provider (Cloudflare, DuckDNS, DigitalOcean, ecc.)
7. Configurazioni personalizzate
Ogni proxy host può avere:
- Custom Nginx configuration snippets (prima o dopo il blocco location)
- Header personalizzati
- Regole di caching e buffering
- Proxy buffering / timeouts personalizzati
8. Statistiche e log
Visualizza log di accesso e di errore di Nginx tramite GUI.
Supporta download dei log e monitoraggio dello stato dei proxy host.
9. Aggiornamenti e backup
Backup e restore delle configurazioni (data/ directory).
Aggiornamenti automatici se gestito con Docker (semplice docker compose pull && up -d).
Pro — Vantaggi
Facilità d’uso: GUI intuitiva, anche per chi non conosce Nginx.
Certificati SSL automatici: Let’s Encrypt integrato con rinnovo automatico.
Gestione multi-host: Ideale per ambienti con molti servizi web.
Multiutente e ruoli: Accesso controllato da più amministratori.
Compatibile con Docker: Facile da distribuire e mantenere.
Supporta WebSocket e streaming: Perfetto per app moderne (Home Assistant, Nextcloud, ecc.)
Log integrati: Monitoraggio semplificato dei proxy host.
Contro — Limitazioni e svantaggi
Limitato rispetto a Nginx “puro”: Alcune configurazioni avanzate (load balancing complesso, rewrite dinamici, cache layer) richiedono modifiche manuali nei file Nginx.
Prestazioni leggermente inferiori: Leggero overhead rispetto a un Nginx configurato manualmente.
Non ideale per ambienti enterprise complessi: Mancano funzioni di HA nativa, clustering, API ufficiali per automazione.
Database SQLite: Non scalabile per ambienti multi-server. (ma si può migrare a MySQL manualmente)
Aggiornamenti manuali (Docker): Non si aggiorna automaticamente senza un orchestratore.
DNS Challenge limitato: Non tutti i provider DNS supportati nativamente.
Quando usarlo
Ideale per:
- Ambienti home lab o piccoli server
- Piccole aziende e sviluppatori
- Gestione centralizzata di più servizi (Nextcloud, Vaultwarden, Jellyfin, ecc.)
- Chi vuole HTTPS senza dover gestire manualmente Nginx o Certbot
Sconsigliato per:
- Infrastrutture enterprise / HA / Kubernetes
- Applicazioni ad alta scala o con requisiti di tuning Nginx complesso
- Automazioni CI/CD avanzate (non ha API REST pubblica stabile)

0 commenti