Vai al contenuto principale
50% di sconto tutti i piani, tempo limitato. A partire da $2.48/mo
14 min left
App web e business

Nginx Proxy Manager su un VPS: recensione e guida alla configurazione

C Di Chike 14 min di lettura
Nginx Proxy Manager on a VPS routing one public IP to Dashboard, Media Server, Database, and Blog containers over HTTPS

Hai un VPS con cinque o sei servizi Docker: Nextcloud, Uptime Kuma, un blog Ghost, magari un Vaultwarden. Un solo IP pubblico. E vuoi che ognuno abbia il proprio sottodominio con HTTPS, senza modificare a mano i file di configurazione di Nginx ogni volta che aggiungi un container. È esattamente il problema che Nginx Proxy Manager esiste per risolvere.

Questa è insieme una recensione e una configurazione completa di Nginx Proxy Manager su VPS. Nginx Proxy Manager (NPM) è un'app Docker che avvolge Nginx in un'interfaccia web: fai puntare i sottodomini ai container di backend e richiedi i certificati Let's Encrypt tramite una dashboard invece di scrivere le direttive a mano. La guida è pensata per self-hoster e sysadmin che già usano Docker e ora hanno bisogno di un reverse proxy che non richieda di mettere mano a nginx.conf.

Alla fine saprai se NPM fa al caso tuo, lo avrai in esecuzione con HTTPS sul tuo VPS e conoscerai i criteri per passare a Caddy o Traefik quando NPM smette di essere lo strumento giusto.

La versione breve

  • Cos'è NPM: un'app Docker che aggiunge un'interfaccia web sopra Nginx per gestire i proxy host e l'HTTPS automatico con Let's Encrypt. Si adatta a chi vuole una GUI e gestisce uno stack di servizi piccolo e abbastanza statico.
  • I compromessi: la configurazione risiede in un database SQLite, quindi non è versionabile né confrontabile come un file di configurazione. Al 12 luglio 2026, l'ultima release taggata è affetta da CVE-2026-40519, quindi le nuove installazioni dovrebbero attendere una release taggata che contenga la correzione. Il pannello di amministrazione sulla porta 81 è la cosa principale da mettere in sicurezza.
  • Dimensionamento: NPM di per sé consuma a riposo circa 50 MB di RAM. Un VPS da 1 GB è la base pratica; 2 GB sono comodi una volta aggiunti i servizi dietro di esso.
  • Quando cambiare: resta su NPM per uno stack piccolo e per lo più statico in cui una GUI conta. Usa Caddy quando vuoi la configurazione come codice e un ingombro minore. Usa Traefik quando frequenti modifiche ai container rendono l'auto-discovery di Docker più utile della registrazione manuale degli host.

Cosa non copre questa guida

Questa è una guida all'installazione su VPS, non un manuale di riferimento. Per mantenerla focalizzata, i seguenti argomenti sono fuori ambito:

  • Personalizzazione approfondita delle direttive Nginx (blocchi location personalizzati oltre a quanto esposto dall'interfaccia di NPM).
  • Architetture di bilanciamento del carico su larga scala.
  • Confronto con gli ingress di Kubernetes.
  • NPM su Windows.
  • Il percorso con Cloudflare Tunnel per configurazioni senza IP statico.

Cosa fa Nginx Proxy Manager (e dove ti crea problemi)

Nginx Proxy Manager taking one public IP and routing subdomains such as app, status, cloud, and vault.example.com to separate backend containers, each with SSL enabled

Nginx Proxy Manager è un'applicazione Docker che esegue Nginx al di sotto e aggiunge una dashboard web al di sopra. Crei proxy host (dal sottodominio al container e alla porta di backend) e richiedi i certificati Let's Encrypt tramite moduli invece che tramite file di configurazione. Si adatta a uno stack piccolo e abbastanza statico di app self-hosted su un solo VPS.

Oltre alle funzioni di base, la dashboard gestisce anche le liste di accesso e l'inoltro grezzo di stream TCP/UDP. Per uno stack di app su un solo VPS è una vera comodità: aggiungi un container, apri la dashboard, gli fai puntare un sottodominio, clicchi per emettere un certificato. Fatto.

Il compromesso principale è che la configurazione di riferimento di NPM risiede per impostazione predefinita in un database SQLite. NPM genera comunque file Nginx leggibili in /data/nginx/proxy_host/, ma quei file sono artefatti generati e non la configurazione dichiarativa che modifichi e versioni. Puoi ispezionarli, ma non sono un sostituto pulito di un Caddyfile o delle label di Traefik, e il modo affidabile per riprodurre l'installazione è ripristinare i volumi dei dati e dei certificati di NPM. Per uno stack piccolo e statico può essere accettabile. Per un flusso di lavoro infrastrutturale basato su Git è una vera limitazione.

Al 12 luglio 2026, l' ultima release taggata è la v2.15.1, pubblicata il 3 giugno 2026. Il progetto resta attivo e con licenza MIT, ma la sua attuale situazione di sicurezza richiede un'importante precisazione: NVD elenca le versioni dalla 2.9.14 alla 2.15.1 come affette da CVE-2026-40519, una vulnerabilità di command injection autenticata corretta nel commit a5db5ed ma non ancora inclusa in una release taggata più recente. Prima di installare, controlla la pagina delle release e usa la prima versione taggata che contiene tale correzione. NPM è mantenuto, ma al momento la v2.15.1 non va descritta come completamente corretta.

Quanto all'ingombro, NPM a riposo consuma circa 50 MB di RAM secondo il confronto tra reverse proxy di byte-guard. È abbastanza leggero da fare in modo che NPM non sia quasi mai ciò che mette sotto sforzo il tuo VPS. Lo sono i servizi dietro di esso.

Il mio parere: NPM è una scelta ragionevole nel 2026 se vuoi una GUI e gestisci un piccolo stack Docker. Se vivi nel version control e vuoi la configurazione del proxy in Git, guarda invece a Caddy. La configurazione basata su SQLite è il fattore decisivo, non un difetto del proxying in sé.

NPM baratta la portabilità della configurazione con una GUI. È un compromesso accettabile per uno stack piccolo e statico e fastidioso per un flusso di lavoro basato su Git.

NPM vs Caddy vs Traefik: quale reverse proxy fa al caso del tuo VPS

NPM, Caddy, and Traefik compared: NPM is a GUI for small static stacks at about 50 MB idle, Caddy is config-as-code for simple deployments at about 30 MB, and Traefik uses Docker auto-discovery for changing containers at about 80 MB

I tre strumenti si distinguono lungo quattro assi che determinano la scelta: come li configuri, come gestiscono l'HTTPS, come scalano con il numero di servizi e quanta RAM consumano a riposo. Ecco il confronto.

AttributoGestore Proxy NginxCaddyTraefik
Modello di configurazioneGUI web, memorizzata in SQLiteCaddyfile (testo, versionabile)Label Docker / YAML
HTTPS automaticoSì, richiesta per host dall'interfacciaSì, in modo predefinito, senza configurazioneSì, richiede la configurazione del resolver ACME
Auto-discovery DockerNoNoSì, tramite label dei container
RAM a riposo~50 MB~30 MB~80 MB
Caso idealeUtenti di GUI, stack piccoli/staticiConfigurazione come codice, ingombro minimoStack Docker dinamici con frequenti modifiche ai container

Le cifre della RAM a riposo sono osservazioni approssimative tratte da un confronto del 2026, non requisiti fissi. L'uso effettivo varia in base alla versione dell'immagine, alle funzionalità abilitate, al traffico e alla registrazione dei log.

I criteri di scelta discendono direttamente da quella tabella. Se vuoi una dashboard e gestisci una manciata di servizi che non cambiano spesso, NPM è lo strumento giusto. Se preferisci la configurazione come codice, vuoi l'ingombro minimo o apprezzi il provisioning e rinnovo HTTPS automatici di Caddy senza alcuna configurazione ACME, usa Caddy. Personalmente scelgo Caddy per le installazioni a singolo sito perché la gestione SSL è automatica e il Caddyfile è breve. Se aggiungi, rimuovi o reinstalli container di frequente, l'auto-discovery basato su label di Traefik ti permette di smettere di registrare a mano ogni nuovo host.

C'è anche Nginx nudo con Certbot, che alcuni amministratori preferiscono per un controllo preciso o per installazioni non basate su Docker. Certbot può automatizzare il rinnovo dei certificati, ma il routing dei virtual host e la configurazione di Nginx restano a tuo carico. Se il motivo principale per cui stai valutando NPM è evitare la configurazione manuale del proxy, è improbabile che Nginx nudo sia la scelta migliore.

Una nota sulla scelta: il confronto di byte-guard individua in Caddy l'opzione più leggera del confronto e, per una configurazione a host singolo nuova nel 2026, è una scelta ragionevole. Caddy vince per essere più leggero di NPM, ma se vuoi specificamente una GUI non è la soluzione migliore per te.

Per un confronto diretto più approfondito dei motori sottostanti, consulta il confronto tra Caddy e Nginx su un VPS.

Prerequisiti: cosa ti serve

Prima di installare, tieni pronte queste cose. È un elenco breve, ma se salti anche un solo elemento il passaggio del certificato fallirà più avanti.

  • Un VPS con Docker e Docker Compose installati (vanno bene Ubuntu 22.04 LTS o Debian 12).
  • Un nome di dominio, con un record DNS A (e AAAA se usi IPv6) che punti all'IP pubblico del tuo VPS.
  • Accesso SSH al VPS.
  • Porte 80 e 443 aperte a Internet nel tuo firewall.
  • Porta 81 raggiungibile solo da te, non aperta al pubblico (trattata nella sezione sulla sicurezza).

Configurare Nginx Proxy Manager sul tuo VPS con Docker Compose

Deploying Nginx Proxy Manager with Docker Compose: ports 80 and 443 public, the admin UI on port 81 bound to 127.0.0.1, and backend containers joined to a shared proxy Docker network

Questa sezione installa NPM usando Docker Compose. Una volta che i tuoi record DNS risolvono verso il VPS, la configurazione del container in sé è rapida, anche se la propagazione del DNS e l'emissione del certificato possono richiedere più tempo.

La configurazione usa un unico file Docker Compose e un comando una tantum per creare una rete Docker condivisa. Crea una directory, crea la rete, aggiungi il docker-compose.yml file qui sotto e avvia il container.

Per prima cosa, crea la rete Docker condivisa:

docker network create proxy

Poi crea il seguente docker-compose.yml file:

# docker-compose.yml
services:
  npm:
    image: 'jc21/nginx-proxy-manager:<PATCHED_VERSION>'
    restart: unless-stopped
    ports:
      - '80:80'                 # public HTTP
      - '443:443'               # public HTTPS
      - '127.0.0.1:81:81'       # admin UI, reachable only from the VPS itself
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - proxy
networks:
  proxy:
    external: true

Collega alla stessa rete esterna proxy ogni container di backend che NPM deve raggiungere tramite nome di servizio. Questo permette a NPM di risolvere il container tramite il suo nome di servizio senza pubblicare la porta dell'applicazione di backend sul VPS.

Esegui il backup sia di ./data e i piani ./letsencrypt prima degli aggiornamenti. La directory dei dati contiene il database di NPM e la configurazione generata, mentre la directory di Let's Encrypt contiene il materiale dei certificati.

Alcune note su questo file. L'immagine usa per impostazione predefinita un database SQLite memorizzato nel ./data volume. È il backend predefinito ed è corretto per la maggior parte delle installazioni su singolo VPS. Se hai bisogno di un database esterno, NPM supporta MariaDB/MySQL e PostgreSQL, il che significa aggiungere un servizio di database e le relative variabili d'ambiente. Per un singolo VPS, SQLite resta l'impostazione predefinita più semplice, a meno che tu non abbia un motivo chiaro per spostare il database fuori dal volume dei dati. La policy restart: unless-stopped fa sì che NPM si riavvii se il VPS viene riavviato, che è ciò che vuoi per un servizio che si trova davanti a tutto il resto.

Avvialo e verifica che sia in esecuzione:

docker compose up -d
docker compose ps

Output atteso: il container npm con stato Up, le porte 80 e 443 mappate pubblicamente e la porta 81 associata solo a 127.0.0.1. Il primo avvio richiede un paio di minuti mentre NPM genera una chiave JWT, inizializza il database e crea l'utente amministratore predefinito. La documentazione ufficiale di configurazione descrive questa sequenza di primo avvio.

Crea un tunnel SSH dal tuo computer locale prima di aprire l'interfaccia di amministrazione:

ssh -L 8181:127.0.0.1:81 user@your-vps

Poi apri http://127.0.0.1:8181 nel tuo browser. In un'installazione nuova, accedi con [email protected] e i piani changeme, poi sostituisci immediatamente l'email e la password predefinite. Non rendere la dashboard raggiungibile pubblicamente finché le credenziali predefinite sono attive.

Una volta cambiate le credenziali dell'amministratore, aggiungi il tuo primo proxy host:

  1. Nella dashboard, vai su Hosts, poi Proxy Hosts, poi Add Proxy Host.
  2. Imposta Domain Name sul tuo sottodominio (ad esempio cloud.example.com).
  3. Imposta Forward Hostname / IP sul nome o sull'IP del container di backend, e Forward Port sulla porta su cui è in ascolto.
  4. Salva. Il proxy host compare nell'elenco e il traffico verso quel sottodominio ora raggiunge il tuo container.

Se accanto a questo esegui un'interfaccia di gestione Docker, vale lo stesso schema: fai puntare un sottodominio allo strumento di gestione dei container nello stesso modo, e fai lo stesso per un stack di monitoraggio Prometheus e Grafana che vuoi collocare dietro il proxy.

Configurare l'HTTPS automatico per un sottodominio

Configuring automatic HTTPS in Nginx Proxy Manager: a DNS A record points the subdomain at the VPS, Let's Encrypt validates ownership over HTTP-01 on port 80 or DNS-01 for wildcards, and the certificate installs with Force SSL and HTTP/2 enabled

Questa sezione ti fornisce un certificato Let's Encrypt valido e a rinnovo automatico per il tuo sottodominio. Il prerequisito è quello che coglie molti di sorpresa: il record DNS A di quel sottodominio deve già puntare al tuo VPS e la porta 80 deve essere raggiungibile da Internet, perché Let's Encrypt verifica il dominio connettendosi ad esso.

Creato il proxy host, richiedi il certificato:

  1. Modifica il proxy host, apri la SSL scheda.
  2. Sotto Certificato SSL, scegli Request a new SSL Certificate.
  3. Abilita Force SSL e i piani HTTP/2 Support. Attiva HSTS solo dopo aver confermato che l'HTTPS funziona correttamente, perché i browser possono memorizzare in cache la policy e rendere più difficile il ripristino da un errore di certificato o di configurazione del proxy.
  4. Accetta i termini di Let's Encrypt e salva.

Per impostazione predefinita, NPM usa la sfida HTTP-01 per i nomi non wildcard, convalidando ogni hostname richiesto sulla porta 80. Un certificato può contenere più nomi non wildcard, ma HTTP-01 non può emettere certificati wildcard. I nomi wildcard come *.example.com richiedono la sfida DNS-01 con un provider DNS supportato. Per una normale configurazione con un sottodominio per servizio, HTTP-01 è tutto ciò che ti serve e i rinnovi sono automatici.

Se la richiesta del certificato fallisce, controlla prima la porta 80. Tra le cause comuni ci sono una porta 80 irraggiungibile, una regola errata del firewall cloud o del security group e un DNS che non ha ancora completato la propagazione. Let's Encrypt non può convalidare un dominio che non riesce a raggiungere.

Mettere in sicurezza il pannello di amministrazione di NPM su un VPS

Securing the Nginx Proxy Manager admin panel: public access to port 81 is blocked while admin access is allowed only through an SSH tunnel or private VPN to 127.0.0.1:81, with two-factor authentication and a patched version

L'interfaccia di amministrazione sulla porta 81 è la principale esposizione di un'installazione NPM, e questa sezione la mette in sicurezza. Si tratta di hardening operativo, non di un audit di sicurezza: tre cose, fatte una volta sola, e il profilo di rischio cala nettamente.

Primo, e più importante, mantieni la porta 81 associata a 127.0.0.1 come mostrato nel file Docker Compose. Raggiungi la dashboard tramite il tunnel SSH descritto in precedenza. Se hai bisogno di un accesso remoto permanente, rendi l'interfaccia di amministrazione raggiungibile solo tramite una VPN privata. Non pubblicare la porta 81 sull'IP pubblico del VPS.

Secondo, abilita l'autenticazione a due fattori TOTP sul tuo account amministratore. NPM ha aggiunto la 2FA basata su TOTP nella versione 2.13.6, quindi qualsiasi installazione attuale ne dispone. Attivala.

Terzo, mantieni NPM aggiornato con le patch e verifica la versione esatta invece di dare per scontato che il tag latest sia sicuro. CVE-2026-40519 riguarda le versioni dalla 2.9.14 alla 2.15.1 e può consentire l'esecuzione di codice remoto autenticata tramite credenziali di provider DNS malevole. CVE-2026-50892 riguarda la v2.14.0 e può consentire a un utente malintenzionato autenticato di ottenere il materiale della chiave privata di Let's Encrypt. Un problema precedente, CVE-2025-50579, riguardava la v2.12.3 tramite una falla CORS che poteva esporre i token JWT. La regola pratica è semplice: mantieni la porta 81 privata, abilita l'autenticazione a due fattori, fissa una versione con patch nota e verifica gli avvisi di sicurezza prima di aggiornare.

La porta 81 resta privata e NPM resta aggiornato con le patch. Fai queste due cose e i principali rischi noti diventano molto più facili da gestire per una normale configurazione su singolo VPS.

Dimensionare il tuo VPS per Nginx Proxy Manager

NPM di per sé è leggero; la questione del dimensionamento riguarda in realtà NPM più i servizi che stanno dietro di esso. L'ingombro a riposo del proxy è raramente il vincolo. Un'istanza Nextcloud o un blog Ghost useranno più risorse del proxy stesso.

Ecco come si articolano in pratica i vari livelli:

  • Base pratica minima: 1 GB RAM, 1 vCPU e 10 GB di storage. Uno guida al dimensionamento di terze parti usa la stessa base, ma trattala come indicazione di pianificazione anziché come requisito ufficiale di NPM. È sufficiente per NPM, il sistema operativo e alcuni servizi leggeri, ma lascia un margine limitato.
  • Comodo: 2 GB RAM, 1 vCPU, 20 GB di storage. NPM più da tre a cinque servizi con spazio per respirare. È il punto ideale per la maggior parte dei self-hoster.
  • Livello superiore: 4 GB RAM, 2 vCPU. Per un numero di servizi da otto a dodici, o una configurazione con traffico significativo in cui vuoi un margine di CPU per la terminazione TLS.

Il numero su cui dimensionare è la somma delle app proxate, non NPM. Somma gli ingombri di RAM dei servizi che intendi eseguire, aggiungi sopra il piccolo overhead a riposo del proxy e scegli con margine il livello superiore a quel valore.

Dimensionare il server è la parte facile. Mettere in funzione NPM richiede comunque il provisioning del VPS, l'installazione di Docker, il download dell'immagine e il passaggio attraverso quella configurazione di primo avvio. Se preferisci saltare i passaggi di provisioning, il marketplace di Cloudzy offre un'installazione a un clic di Nginx Proxy Manager su un VPS NVMe. Avvia il container su un server nuovo, così vai dritto alla dashboard e al tuo primo proxy host. In ogni caso, i livelli di dimensionamento indicati sopra sono ciò su cui effettuare il provisioning.

Domande frequenti

Qual è la differenza tra Nginx e Nginx Proxy Manager?

Nginx è il web server e il motore di reverse proxy vero e proprio, che configuri modificando file di testo. Nginx Proxy Manager è un'applicazione Docker che esegue Nginx al di sotto e aggiunge un'interfaccia web al di sopra, così gestisci i proxy host e i certificati Let's Encrypt tramite una dashboard invece di scrivere file di configurazione. NPM è il livello GUI; Nginx è il motore che fa il lavoro.

Vale ancora la pena usare Nginx Proxy Manager nel 2026?

Sì, per chi preferisce una GUI e gestisce un piccolo stack Docker, ma solo dopo aver verificato che l'immagine che installi includa le ultime correzioni di sicurezza. Al 12 luglio 2026, la v2.15.1 è l'ultima release taggata, e NVD la elenca come affetta da CVE-2026-40519. Se preferisci la configurazione come codice, Caddy resta la scelta migliore; la configurazione basata su SQLite di NPM è la sua principale limitazione operativa.

Qual è la RAM minima per Nginx Proxy Manager?

NPM di per sé consuma a riposo circa 50 MB di RAM. Un VPS da 1 GB è una base pratica, sufficiente per NPM più un paio di servizi leggeri. 2 GB sono comodi una volta aggiunte altre app proxate. Il vero requisito di RAM è determinato dai servizi dietro NPM, non da NPM stesso.

Dovrei esporre la porta 81 a Internet?

No. Mantieni la porta 81 associata a localhost e accedivi tramite un tunnel SSH, oppure rendila raggiungibile solo tramite una VPN privata. Non pubblicare l'interfaccia di amministrazione sull'IP pubblico del VPS.

Posso usare Nginx Proxy Manager senza Docker?

No. NPM è distribuito e progettato come container Docker, e non esiste un'installazione non basata su Docker supportata. Se non puoi o non vuoi usare Docker, usa invece Nginx nudo con Certbot, oppure Caddy come binario singolo.

Nginx Proxy Manager supporta i certificati wildcard?

Sì, tramite una sfida DNS-01 con un provider DNS supportato configurato. I certificati standard a hostname singolo usano la sfida HTTP-01 sulla porta 80; i certificati wildcard (*.example.com) richiedono DNS-01 perché l'autorità di certificazione convalida il controllo scrivendo un record DNS anziché raggiungere un singolo host.

Condividi

Altro dal blog

Continua a leggere.

Pronto a distribuire? Da 2,48 $/mese.

Cloud indipendente, dal 2008. AMD EPYC, NVMe, 40 Gbps. Rimborso entro 14 giorni.