Nginx Proxy · 15 min read · Nov 20, 2025
Come installare e utilizzare Nginx Proxy Manager con Docker

Un reverse proxy è un server web che può trovarsi davanti a un altro server web o a un servizio web. Può crittografare il traffico in uscita, fungere da bilanciatore di carico, reindirizzare il traffico e offrire protezione. Il server web Nginx può essere utilizzato come server proxy davanti a server tradizionali, ma a volte configurarlo può essere noioso e causare problemi se non fatto correttamente.
Nginx Proxy Manager è un’applicazione che semplifica la configurazione di Nginx come server proxy fornendo un’interfaccia grafica (GUI) con funzionalità come supporto SSL integrato utilizzando Let’s Encrypt, supporto per più host, autenticazione HTTP, liste di accesso e gestione degli utenti.
Questo tutorial ti insegnerà come installare il gestore proxy Nginx su un server Linux utilizzando Docker. Copriremo tutte le distribuzioni Linux popolari in un unico tutorial.
Prerequisiti
- Un server Linux che esegue Ubuntu/Debian/CentOS/Alma Linux/Rocky Linux con un minimo di 1 GB di RAM.
- Un utente non root con privilegi sudo.
- Un nome di dominio completamente qualificato (FQDN) come
npm.example.comche punta al server.
Passo 1 - Configurare il Firewall
Cent OS/Rocky Linux/Alma Linux
Dovresti avere installato il firewall Firewalld. Controlla lo stato del firewall.
$ sudo firewall-cmd --state
running
Apri le porte 80, 81 e 443.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=81/tcp
Ricarica il firewall per abilitare le modifiche.
$ sudo firewall-cmd --reload
Ubuntu/Debian
I sistemi Ubuntu e Debian utilizzano ufw (Uncomplicated Firewall) per impostazione predefinita.
Controlla se il firewall è in esecuzione.
$ sudo ufw status
Se è in esecuzione, apri le porte 80, 81 e 443.
$ sudo ufw allow 80
$ sudo ufw allow 81
$ sudo ufw allow 443
Apri la porta SSH se il firewall non è in esecuzione.
$ sudo ufw allow "OpenSSH"
Abilita il firewall se non è in esecuzione.
$ sudo ufw enable
Se è in esecuzione, ricaricalo per applicare le modifiche.
$ sudo ufw reload
Passo 2 - Installare Docker
Cent OS/Rocky Linux/Alma Linux
Esegui il seguente comando per installare Docker.
$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io
Ubuntu
$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.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 docker-ce docker-ce-cli containerd.io
Debian
$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
Abilita e avvia il servizio Docker.
$ sudo systemctl start docker --now
Aggiungi il tuo nome utente al gruppo Docker.
$ sudo usermod -aG docker $USER
Disconnettiti dal sistema e accedi di nuovo per applicare la modifica.
Passo 3 - Installare Docker Compose
Scarica e installa il binario di Docker Compose.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Applica i permessi di esecuzione al binario.
$ sudo chmod +x /usr/local/bin/docker-compose
Passo 4 - Creare il file Docker Compose
Crea una directory per il gestore proxy Nginx.
$ mkdir ~/nginx-proxy
Passa alla directory.
$ cd ~/nginx-proxy
Crea directory per i dati degli utenti e i certificati SSL.
$ mkdir {data,letsencrypt}
Crea e apri il file docker-compose.yml per la modifica.
$ nano docker-compose.yml
Incolla il seguente codice in esso.
version: "3"
services:
npm-app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: npm-app
restart: unless-stopped
ports:
- '80:80' # Porta HTTP pubblica
- '443:443' # Porta HTTPS pubblica
- '81:81' # Porta Web Admin
# Aggiungi qualsiasi altra porta Stream che desideri esporre
# - '21:21' # FTP
environment:
DB_MYSQL_HOST: "npm-db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
# Decommenta la riga qui sotto se IPv6 non è abilitato sul tuo host
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- npm-db
networks:
- npm-nw
- npm-internal
npm-db:
image: 'mariadb:latest'
container_name: npm-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./data/mysql:/var/lib/mysql
networks:
- npm-internal
networks:
npm-internal:
npm-nw:
external: true
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Esaminiamo il file. La prima parte del file è dove importiamo l’immagine del gestore proxy Nginx e impostiamo alcune variabili ambientali sotto forma di credenziali del database. Espandiamo anche le porte 80, 81 e 443 al server per l’accesso. Puoi esporre più porte, come 21, per l’accesso FTP. Puoi disabilitare il supporto IPV6 decommentando la riga DISABLE_IPV6: 'true'. Abbiamo mappato diverse directory dal nostro host a Docker per la memorizzazione dei dati e SQL.
Stiamo utilizzando due reti qui. Una è la rete interna npm-internal per connettere il gestore proxy e il database. Questa è opzionale poiché viene creata automaticamente. Ma qui, lo stiamo facendo manualmente dandole un nome a nostra scelta.
Abbiamo aggiunto una rete esterna al contenitore del gestore proxy chiamata npm-nw. Questa rete è essenziale perché puoi usarla per connettere il gestore proxy a qualsiasi altro contenitore Docker che installi. Utilizzare una rete ti consentirà di connettere qualsiasi contenitore direttamente senza la necessità di esporre le sue porte al server.
Passo 5 - Eseguire Nginx Proxy Manager
Prima di avviare il contenitore Docker, dobbiamo creare la rete esterna npm-nw. Le reti interne vengono create automaticamente. Esegui il seguente comando per creare la rete esterna.
$ docker network create npm-nw
Avvia il contenitore Docker utilizzando il seguente comando.
$ docker-compose up -d
Controlla lo stato dei contenitori.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c91ca0ddca97 jc21/nginx-proxy-manager:latest "/init" About a minute ago Up About a minute 0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp npm-app
1738d71b95da mariadb:latest "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp npm-db
Passo 6 - Accedere a Nginx Proxy Manager
Ora puoi accedere al tuo gestore proxy Nginx tramite l’URL http://yourserverIP:81. Dovresti ottenere la seguente schermata di accesso.

Inserisci le seguenti credenziali predefinite per accedere.
Indirizzo email: [email protected] Password: changeme
Successivamente, ti verrà immediatamente chiesto di impostare un nome e un indirizzo email.

Fai clic sul pulsante Salva e ti verrà chiesto di impostare una nuova password.

Fai clic di nuovo sul pulsante Salva e ora puoi iniziare a utilizzare l’applicazione.

Se apri l’URL http://yourserverIP nel tuo browser, verrai portato a una pagina predefinita che il gestore proxy ha impostato.

Passo 7 - Configurare il Nome di Dominio e SSL per Nginx Proxy Manager
Impostiamo un nome di dominio per accedere a Nginx Proxy Manager. Questo passaggio è facoltativo ma utile se desideri mettere l’applicazione dietro SSL.
Fai clic su Hosts >> Proxy Hosts dal menu della dashboard per aprire la pagina Proxy Hosts. Da lì, fai clic sul pulsante Aggiungi Proxy Host per procedere.

Aggiungi il nome FQDN ( npm.example.com) e fai clic su di esso. Inserisci l’indirizzo IP del tuo server e 81 come Porta di inoltro.
Passa alla scheda SSL.

Seleziona Richiedi un nuovo certificato SSL dal menu a discesa. Seleziona le opzioni Forza SSL e supporto HTTP/2. Se desideri abilitare HSTS, puoi abilitarlo anche. Se hai configurato il tuo dominio tramite Cloudflare, non abilitare l’opzione Forza SSL altrimenti rimarrai bloccato in un ciclo di reindirizzamento.
Inserisci il tuo indirizzo email, accetta i Termini di Servizio (TOS) di Let’s Encrypt e fai clic sul pulsante Salva per terminare.

Il tuo dominio dovrebbe essere attivo e funzionante. Prova ad aprire https://npm.example.com nel tuo browser e dovresti ottenere la schermata di accesso di Nginx Proxy Manager.
Puoi fare lo stesso per la pagina di atterraggio predefinita e assegnarla a un nome di dominio come https://example.com. Cambia semplicemente la porta da 81 a 81 durante la configurazione del proxy host.
Passo 8 - Utilizzare Nginx Proxy Manager con un’altra applicazione web Docker
Ora che abbiamo installato il gestore proxy, è tempo di metterlo a qualche uso. La prima cosa che faremo è usarlo per ospitare un’altra applicazione web Docker. Per questo, installeremo il blog Ghost. Se desideri saperne di più, controlla il nostro tutorial su come installare Ghost utilizzando Docker su un server Ubuntu.
Crea un’altra directory per il tuo blog Ghost.
$ mkdir ~/ghost
Passa alla directory Ghost.
$ cd ~/ghost
Crea due directory per il contenuto e il database.
$ mkdir {content,mysql}
Anche se stai utilizzando la stessa immagine MySQL, dovresti mantenere i dati e i loro contenitori separati da quelli del gestore proxy. Questo aiuterà a isolare eventuali problemi che potresti incontrare e ti permetterà di spostare le cose in caso di necessità.
Crea e apri il file Docker compose per la modifica.
$ nano docker-compose.yml
Incolla il seguente codice. Sostituisci example.com con il tuo nome di dominio effettivo per il tuo blog Ghost. Inserisci i dettagli SMTP se desideri ricevere email. Puoi rimuoverli se non ne hai bisogno.
version: '3.3'
services:
ghost-app:
image: ghost:latest
container_name: ghost-app
restart: always
depends_on:
- ghost-db
environment:
url: https://ghost.example.com
database__client: mysql
database__connection__host: ghost-db
database__connection__user: ghost
database__connection__password: ghostdbpass
database__connection__database: ghostdb
mail__transport: SMTP
mail__options__host: {Il tuo host del servizio email}
mail__options__port: {La porta del tuo servizio email}
mail__options__secureConnection: {true/false}
mail__options__service: {Il tuo servizio email}
mail__options__auth__user: {Il tuo nome utente}
mail__options__auth__pass: {La tua password}
volumes:
- /home//ghost/content:/var/lib/ghost/content
networks:
- npm-nw
- ghost-network
ghost-db:
image: mariadb:latest
container_name: ghost-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_mysql_root_password
MYSQL_USER: ghost
MYSQL_PASSWORD: ghostdbpass
MYSQL_DATABASE: ghostdb
volumes:
- /home//ghost/mysql:/var/lib/mysql
networks:
- ghost-network
networks:
ghost-network:
npm-nw:
external: true
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Come puoi vedere, abbiamo collegato il contenitore Ghost con il gestore proxy Nginx utilizzando la rete esterna npm-nw. In questo modo, non stiamo esponendo le porte di Ghost al sistema. Abbiamo anche utilizzato una rete interna ghost-network per connettere la nostra app Ghost e il corrispondente contenitore del database.
Avvia il contenitore.
$ docker-compose up -d
Configurare Ghost in Nginx Proxy Manager
Ora dobbiamo impostare il reverse proxy per la nostra installazione di Ghost. Apri il gestore proxy Nginx nel tuo browser, vai su Dashboard >> Hosts >> Proxy Host e aggiungi un nuovo Proxy Host.

Aggiungi il nome di dominio che hai scelto per il tuo blog Ghost. Per il valore Hostname/IP, inserisci il nome del tuo contenitore. In questo caso, sarebbe ghost-app. Non possiamo aggiungere l’indirizzo IP qui perché non abbiamo esposto la porta di Ghost al server, e il proxy Nginx non sarà in grado di raggiungere Ghost tramite l’IP. Pertanto, utilizziamo il nome del contenitore, a cui NPM può accedere utilizzando la rete Docker npm-nw, che abbiamo creato. Usa 2368 come porta, la porta predefinita utilizzata dal blog Ghost. Controlla le altre opzioni come mostrato nello screenshot sopra.
Successivamente, passa alla scheda SSL e crea un nuovo certificato SSL seguendo il passo 6. Poiché caricherai contenuti sul tuo blog Ghost, sarebbe utile impostare una dimensione massima di upload per i tuoi caricamenti.
Fortunatamente, NPM ti consente di aggiungere configurazioni personalizzate. Passa alla scheda Avanzate e inserisci client_max_body_size 50m; nella casella.

Fai clic sul pulsante Salva per terminare l’aggiunta del proxy host. Dovresti essere in grado di accedere al tuo blog Ghost tramite l’URL https://ghost.exampl.com

Passo 9 - Utilizzare Nginx Proxy Manager come servizio di reindirizzamento
Vediamo come puoi utilizzare NPM per reindirizzare facilmente un dominio a un altro. Per farlo, visita Dashboard >> Hosts >> Redirection Hosts. Da lì, fai clic sul pulsante Aggiungi Redirection Host per iniziare.

Inserisci il nome di dominio che desideri inoltrare. E inserisci il dominio di inoltro. Il dominio di inoltro dovrebbe già essere configurato. Lascia lo schema su auto. A seconda delle tue esigenze, puoi scegliere http o https. Seleziona il corretto Codice HTTP e controlla le opzioni Preserva percorso e Blocca exploit comuni. Se stai utilizzando uno schema auto o https, assicurati di aver selezionato o creato un certificato SSL utilizzando NPM. Fai clic su Salva per terminare l’aggiunta del tuo host di reindirizzamento.
Il tuo dominio example.com dovrebbe iniziare a reindirizzare a blog.example.com.
Altri usi di Nginx Proxy Manager
Ci sono altri due modi in cui puoi utilizzare Nginx Proxy Manager. Puoi usarlo come host 404, il che significa che puoi utilizzare un dominio come pagina di atterraggio per mostrare ai motori di ricerca che le pagine del dominio non esistono. Il passaggio include semplicemente l’inserimento di un dominio e la configurazione di SSL per esso. Puoi anche utilizzare questa opportunità per tenere traccia dei log per il nome di dominio e visualizzare il traffico di riferimento.
L’altra funzione è utilizzare NPM come host di streaming. Puoi utilizzare questa funzione per inoltrare porte TCP/UDP a un altro computer sulla rete. Questo è utile se stai ospitando server di gioco. L’unica cosa che richiede è che tu inserisca la porta in entrata, il dominio o l’indirizzo IP di inoltro, la porta di inoltro e selezioni il tipo di porta.

Utilizzare Nginx Proxy Manager per ospitare un sito web statico
Nginx Proxy Manager può ospitare anche siti web statici o dinamici semplici. Per farlo, aggiungi un nuovo proxy host e scegli 127.0.0.1 come Dominio di inoltro e 80 come porta.

Nella scheda Avanzate, inserisci la configurazione specificando la directory radice. Assicurati che la directory radice per il sito sia montata nella configurazione iniziale di Docker compose. Qui stiamo utilizzando la directory /data/static per ospitare il nostro sito web statico.

Fai clic su Salva per terminare e il tuo sito dovrebbe essere accessibile. Puoi ospitare qualsiasi tipo di sito utilizzando il gestore proxy.

Passo 10 - Funzionalità Varie
Utilizzare la funzione di Controllo Accessi di Nginx Proxy Manager
Puoi utilizzare la funzione Liste di Accesso di NPM per abilitare l’autenticazione HTTP o bloccare intervalli di IP. Apri NPM e visita la pagina Dashboard >> Liste di Accesso.
Fai clic sul pulsante Aggiungi Lista di Accesso per iniziare.

Puoi nominare la tua configurazione della Lista di Accesso (ACL). La scheda Soddisfa Qualsiasi se selezionata, consentirà l’accesso se il client soddisfa una qualsiasi delle condizioni specificate. Se un client supera l’autenticazione HTTP ma potrebbe fallire l’accesso basato su IP, sarà consentito. Ma se l’opzione Soddisfa Qualsiasi non è selezionata, il client dovrà soddisfare tutte le condizioni.
La funzione Passa Auth al Host inoltrerà la funzione di autenticazione al server host.
Successivamente, passa alla scheda Autorizzazione. Qui puoi creare un nome utente e una password per il metodo di autenticazione HTTP. Per aggiungere più di un utente, fai clic sul pulsante Aggiungi. Puoi aggiungere solo fino a 5 utenti. E c’è un bug con il pulsante Aggiungi, quindi utilizza prima il pulsante e poi compila i dettagli. Se compili i dettagli e fai clic sul pulsante in seguito per aggiungere un altro utente, cancellerà i dati dell’utente precedente.

Passa alla scheda Accesso. Qui puoi impostare quali indirizzi IP devono essere concessi o negati accesso.

Fai clic su Salva per terminare.
Per utilizzare questa lista di accesso, devi selezionarla quando aggiungi il tuo proxy host. Come nell’esempio per il Blog Ghost qui sotto, abbiamo selezionato la nostra lista di accesso.

Abilitare il supporto per più nomi di dominio
Man mano che il numero di host e domini cresce, il tuo Nginx potrebbe esaurire lo spazio hash o può incorrere in problemi di memoria. Possiamo aggiungere una configurazione personalizzata che si applicherà a tutti gli host per risolvere questo problema.
Per farlo, crea la directory custom all’interno di ~/nginx-proxy/data/nginx.
$ sudo mkdir ~/nginx-proxy/data/nginx/custom
Crea e apri il file http.conf all’interno di questa directory.
$ sudo nano ~/nginx-proxy/data/nginx/custom/http.conf
Incolla le seguenti righe in esso.
proxy_headers_hash_max_size 1024;
proxy_headers_hash_bucket_size 128;
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Nginx dovrebbe accettare automaticamente questi valori. Se non succede, puoi riavviare il contenitore NPM utilizzando il seguente comando.
$ docker restart npm-app
Reindirizzare la Pagina di Atterraggio Predefinita
Nel passo 6, vedi la pagina predefinita quando digiti l’URL http://. Se desideri cambiarlo, è possibile farlo. Per farlo, visita la Pagina delle Impostazioni. Fai clic sui tre punti sul lato destro e fai clic sul pulsante Modifica.

Puoi impostare la pagina di atterraggio per agire come una pagina 404, pagina di reindirizzamento o aggiungere HTML personalizzato utilizzando l’opzione Pagina Personalizzata. Se selezioni Reindirizza, dovrai specificare l’URL di destinazione.

Questo è l’HTML personalizzato che abbiamo utilizzato per il nostro scopo.
Nothing Here
Oops!
Ci scusiamo per l'inconveniente, ma non dovresti essere qui. Non otterrai nulla qui. Questa pagina è stata impostata per la Guida al Gestore Proxy Nginx di HowtoForge. Forse, un giorno mostrerà qualcosa.
Fai clic su Salva per terminare. La tua pagina di atterraggio dovrebbe essere cambiata in qualcosa di simile a quanto segue.

Passo 11 - Aggiornare Nginx Proxy Manager
Per aggiornare NPM, prima ferma i contenitori.
$ cd ~/nginx-proxy
$ docker-compose down --remove-orphans
Scarica le immagini più recenti.
$ docker-compose pull
Avvia di nuovo i contenitori.
$ docker-compose up -d
Conclusione
Questo conclude il nostro tutorial in cui hai installato Nginx Proxy Manager e hai imparato come usarlo per aggiungere un proxy host per un altro contenitore Docker, usarlo come servizio di reindirizzamento e controllare l’accesso utilizzandolo. Se hai domande, pubblicale nei commenti qui sotto.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.