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.com che 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.

Schermata di accesso Nginx Proxy Manager

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.

Popup Modifica Utente Nginx Proxy Manager

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

Popup Imposta Password Nginx Proxy Manager

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

Dashboard Nginx Proxy Manager

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

Sito predefinito Nginx Proxy Manager

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.

Schermata Nuovo Proxy Host Nginx Proxy Manager

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.

Configura SSL Nginx Proxy Manager

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.

Elenco Proxy Host Nginx Proxy Manager

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.

Configura Ghost Blog Nginx Proxy Manager

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.

Configurazione avanzata NPM Blog Ghost

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

Home Blog Ghost

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.

Host di reindirizzamento Nginx Proxy Manager

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.

Popup Nuovo Host di Streaming Nginx Proxy Manager

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.

Host Sito Web Statico Nginx Proxy Manager

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.

Configurazione Avanzata Sito Statico Nginx Proxy Manager

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

Pagina Demo Sito Statico

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.

Nuova Lista di Accesso Nginx Proxy Manager

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.

Impostazione Autorizzazione Nginx Proxy Manager

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

Scheda Accesso IP Nginx Proxy Manager

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.

Supporto Lista di Accesso Proxy Nginx Proxy Manager

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.

Modifica Pagina di Atterraggio Nginx Proxy Manager

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.

Impostazioni Sito Predefinito Nginx Proxy Manager

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.

Pagina di Atterraggio Personalizzata Nginx Proxy Manager

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.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.