Come installare e utilizzare Nginx Proxy Manager con Docker
Su questa pagina
- Prerequisiti
- Passaggio 1: configurazione del firewall
- Cent OS/Rocky Linux/Alma Linux
- Ubuntu/Debian
- Cent OS/Rocky Linux/Alma Linux
- Ubuntu
- Debian
- Configura Ghost in Nginx Proxy Manager
- Altri usi di Nginx Proxy Manager
- Utilizza Nginx Proxy Manager per ospitare un sito web statico
- Utilizza la funzione di controllo degli accessi dei gestori proxy di Nginx
- Abilita il supporto per più nomi di dominio
- Reindirizza la pagina di destinazione predefinita
Un proxy inverso è un server Web che può trovarsi di fronte a un altro server Web o a un servizio Web. Può crittografare il traffico in uscita, fungere da bilanciatore del carico, reindirizzare il traffico e offrire protezione. Il server web Nginx può essere utilizzato come server proxy davanti ai server tradizionali, ma a volte configurarlo può essere noioso e causare problemi se non eseguito correttamente.
Nginx Proxy Manager è un'applicazione che semplifica la configurazione di Nginx come server proxy fornendo un'interfaccia utente grafica (GUI) con funzionalità come il supporto SSL integrato utilizzando Lets Encrypt, il supporto per più host, l'autenticazione HTTP, gli elenchi di accesso e l'utente gestione.
Questo tutorial ti insegnerà come installare il gestore proxy Nginx su un server Linux utilizzando Docker. Tratteremo tutte le distribuzioni Linux più diffuse 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 completo (FQDN) come
npm.example.com
che punta al server.
Passaggio 1: configurare il firewall
Sistema operativo Cent/Rocky Linux/Alma Linux
Dovresti avere il firewall Firewalld installato. Controlla lo stato dei firewall.
$ sudo firewall-cmd --state running
Aprire 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
Passaggio 2: installa Docker
Sistema operativo Cent/Rocky Linux/Alma Linux
Eseguire 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
Disconnettersi dal sistema e riconnettersi per applicare la modifica.
Passaggio 3: installa Docker Compose
Scarica e installa il binario di composizione di Docker.
$ 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
Applicare l'autorizzazione eseguibile al file binario.
$ sudo chmod +x /usr/local/bin/docker-compose
Passaggio 4: crea il file di composizione Docker
Crea una directory per il gestore proxy Nginx.
$ mkdir ~/nginx-proxy
Passa alla rubrica.
$ cd ~/nginx-proxy
Crea directory per dati utente e certificati SSL.
$ mkdir {data,letsencrypt}
Crea e apri il file
docker-compose.yml
per la modifica.$ nano docker-compose.yml
Incolla il seguente codice al suo interno.
version: "3" services: npm-app: image: 'jc21/nginx-proxy-manager:latest' container_name: npm-app restart: unless-stopped ports: - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port # Add any other Stream port you want to expose # - '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" # Uncomment the line below if IPv6 is not enabled on your 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 dei gestori proxy Nginx e impostiamo alcune variabili di ambiente sotto forma di credenziali del database. Esponiamo anche le porte 80, 81 e 443 al server per l'accesso. È possibile esporre più porte, ad esempio 21, per l'accesso FTP. Puoi disabilitare il supporto IPV6 rimuovendo il commento dalla riga
DISABLE_IPV6: true
. Abbiamo mappato diverse directory dal nostro host al Docker per l'archiviazione di dati e SQL.Stiamo usando due reti qui. Uno è la rete interna
npm-internal
per connettere il proxy manager e il database. Questo è facoltativo poiché viene creato automaticamente. Ma qui lo stiamo facendo manualmente dandogli un nome a nostra scelta.Abbiamo aggiunto una rete esterna al contenitore del gestore proxy chiamato
npm-nw
. Questa rete è essenziale perché puoi usarla per connettere il gestore proxy a qualsiasi altro contenitore docker che installi. L'utilizzo di una rete ti consentirà di connettere direttamente qualsiasi contenitore senza la necessità di esporre le sue porte al server.Passaggio 5: eseguire Nginx Proxy Manager
Prima di avviare il contenitore Docker, dobbiamo creare la rete esterna
npm-nw
. Le reti interne vengono create automaticamente. Eseguire il comando seguente 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
Passaggio 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.Immettere le seguenti credenziali predefinite per accedere.
Indirizzo email:
[email
Password: changemeSuccessivamente, 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 di nuovo clic sul pulsante Salva e ora puoi iniziare a utilizzare l'applicazione.
Se apri l'URL
http://yourserverIP
nel tuo browser, verrai indirizzato a una pagina predefinita impostata dal gestore proxy.Passaggio 7: configurazione del 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 si desidera mettere l'applicazione dietro SSL.
Fai clic su Host >> Host proxy dal menu del dashboard per aprire la pagina Host proxy. Da lì, fai clic sul pulsante Aggiungi host proxy 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. Selezionare le opzioni Forza SSL e supporto HTTP/2. Se vuoi abilitare HSTS, puoi abilitare anche quello. 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 e-mail, accetta i Termini di servizio (TOS) di Lets 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 visualizzare la schermata di accesso di Nginx Proxy Managers.Puoi farlo allo stesso modo per la pagina di destinazione predefinita e assegnarla a un nome di dominio come
https://example.com
. Basta cambiare la porta da 81 a 81 durante la configurazione dell'host proxy.Passaggio 8: utilizzare Nginx Proxy Manager con un'altra applicazione Web Docker
Ora che abbiamo installato il proxy manager, è il momento di metterlo a frutto. La prima cosa che faremo è usarla per ospitare un'altra applicazione web Docker. Per questo, installeremo il blog Ghost. Se vuoi saperne di più, consulta il nostro tutorial sull'installazione di Ghost utilizzando Docker su un server Ubuntu.
Crea un'altra directory per il tuo blog Ghost.
$ mkdir ~/ghost
Passa alla directory Ghost.
$ cd ~/ghost
Creare due directory per il contenuto e il database.
$ mkdir {content,mysql}
Anche se stai usando la stessa immagine MySQL, dovresti mantenere i dati e i loro contenitori separati dai gestori proxy. Ciò contribuirà a isolare eventuali problemi che potresti incontrare e ti consentirà di spostare le cose in caso di necessità.
Crea e apri il file di composizione Docker per la modifica.
$ nano docker-compose.yml
Incolla il seguente codice. Sostituisci
example.com
con il tuo vero nome di dominio per il tuo blog Ghost. Inserisci i dettagli SMTP se desideri ricevere e-mail. Puoi rimuoverli se non ti servono.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: {Your Mail Service host} mail__options__port: {Your Mail Service port} mail__options__secureConnection: {true/false} mail__options__service: {Your Mail Service} mail__options__auth__user: {Your User Name} mail__options__auth__pass: {Your Password} volumes: - /home/<username>/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/<username>/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 connesso il container Ghost con il gestore proxy Nginx utilizzando la rete esterna
npm-nw
. In questo modo, non esponiamo le porte Ghosts al sistema. Abbiamo anche utilizzato una rete internaghost-network
per connettere la nostra app Ghost e il contenitore del database corrispondente.Avvia il contenitore.
$ docker-compose up -d
Configura Ghost in Nginx Proxy Manager
Ora, dobbiamo impostare il proxy inverso per la nostra installazione di Ghost. Apri Nginx Proxy manager nel tuo browser, vai su Dashboard >> Host >> Host proxy e aggiungi un nuovo host proxy.
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 Ghosts al server e il proxy Nginx non sarà in grado di raggiungere Ghost tramite l'IP. Quindi, utilizziamo il nome del contenitore, a cui NPM può accedere utilizzando la rete Dockernpm-nw
, che abbiamo creato. Usa2368
come porta, la porta predefinita utilizzata dal Ghost Blog. Controlla le altre opzioni come mostrato nello screenshot qui sopra.Successivamente, passa alla scheda SSL e crea un nuovo certificato SSL seguendo il passaggio 6. Dal momento che caricherai i contenuti sul tuo blog Ghost, sarebbe utile impostare una dimensione massima di caricamento 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.Fare clic sul pulsante Salva per completare l'aggiunta dell'host proxy. Dovresti essere in grado di accedere al tuo blog Ghost tramite l'URL
https://ghost.exampl.com
Passaggio 9: utilizzare Nginx Proxy Manager come servizio di reindirizzamento
Vediamo come utilizzare NPM per reindirizzare facilmente un dominio a un altro. Per farlo, visita Dashboard >> Host >> Host di reindirizzamento. Da lì, fai clic sul pulsante Aggiungi host di reindirizzamento per iniziare.
Inserisci il nome di dominio che desideri inoltrare. E inserisci il dominio di inoltro. Il dominio di inoltro dovrebbe essere già configurato. Lascia lo schema come automatico. A seconda delle tue esigenze, puoi scegliere http o https. Selezionare il codice HTTP corretto e selezionare le opzioni Mantieni percorso e Blocca exploit comuni. Se utilizzi uno schema automatico o https, assicurati di aver selezionato o creato un certificato SSL utilizzando NPM. Fai clic su Salva per completare l'aggiunta dell'host di reindirizzamento.
Il tuo dominio
example.com
dovrebbe iniziare a reindirizzare ablog.example.com
.Altri usi di Nginx Proxy Manager
Esistono altri due modi in cui è possibile utilizzare Nginx Proxy Manager. Puoi usarlo come host 404, il che significa che puoi usare un dominio come landing page per mostrare ai motori di ricerca che le pagine del dominio non esistono. Il passaggio include solo l'inserimento di un dominio e l'impostazione di SSL per esso. Puoi anche utilizzare questa opportunità per tenere traccia dei log per il nome di dominio e visualizzare il traffico dei referrer.
L'altra caratteristica consiste nell'utilizzare NPM come host di streaming. È possibile utilizzare questa funzione per inoltrare le 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 di inoltro o l'indirizzo IP, la porta di inoltro e selezioni il tipo di porta.
Usa Nginx Proxy Manager per ospitare un sito web statico
Nginx Proxy Manager può ospitare anche semplici siti Web statici o dinamici. Per farlo, aggiungi un nuovo host proxy e scegli
127.0.0.1
come dominio di inoltro e 80 come porta.Nella scheda Avanzate, inserisci la configurazione specificando la directory principale. Assicurati che la directory radice per il sito sia montata nella configurazione iniziale di Docker Compose. Qui stiamo usando la directory
/data/static
per ospitare il nostro sito web statico.Fai clic su Salva per terminare e il tuo sito dovrebbe essere accessibile. Allo stesso modo puoi ospitare qualsiasi tipo di sito utilizzando il proxy manager.
Passaggio 10 - Funzioni varie
Utilizza la funzione di controllo degli accessi dei gestori proxy Nginx
È possibile utilizzare la funzionalità degli elenchi di accesso NPM per abilitare l'autenticazione HTTP o bloccare gli intervalli IP. Apri NPM e visita la pagina Dashboard >> Elenchi di accesso.
Fai clic sul pulsante Aggiungi elenco di accesso per iniziare.
È possibile assegnare un nome alla configurazione dell'elenco di accesso (ACL). La scheda Soddisfa qualsiasi, se selezionata, consentirà l'accesso se il client soddisfa una qualsiasi delle condizioni specificate. Se un client passa l'autenticazione HTTP ma potrebbe fallire l'accesso basato su IP, sarà consentito. Ma se l'opzione Soddisfa qualsiasi è deselezionata, il cliente dovrà soddisfare tutte le condizioni.
La funzione Pass Auth to 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, fare clic sul pulsante Aggiungi. Puoi aggiungere solo fino a 5 utenti. E c'è un bug con il pulsante Aggiungi, quindi usa prima il pulsante e poi inserisci i dettagli. Se inserisci i dettagli e fai clic sul pulsante in un secondo momento per aggiungere un altro utente, i dati dell'utente precedente verranno cancellati.
Passa alla scheda Accesso. Qui è possibile impostare gli indirizzi IP a cui concedere o negare l'accesso.
Fare clic su Salva per terminare.
Per utilizzare questo elenco di accesso, devi selezionarlo quando aggiungi il tuo host proxy. Come nell'esempio per Ghost Blog di seguito, abbiamo selezionato la nostra lista di accesso.
Abilita il supporto per più nomi di dominio
Con l'aumentare del numero di host e domini, il tuo Nginx potrebbe esaurire lo spazio hash o incorrere in problemi di memoria. Possiamo aggiungere una configurazione personalizzata che verrà applicata a tutti gli host per risolvere questo problema.
Per fare ciò, crea la directory personalizzata 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 al suo interno.
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 ciò non accade, puoi riavviare il contenitore NPM utilizzando il seguente comando.
$ docker restart npm-app
Reindirizza la pagina di destinazione predefinita
Nel passaggio 6, viene visualizzata la pagina predefinita quando si digita l'URL
http://
. Se vuoi cambiarlo, è possibile farlo. Per farlo, visita la pagina delle impostazioni. Fare clic sui tre punti sul lato destro e fare clic sul pulsante Modifica.Puoi impostare la pagina di destinazione in modo che funga da pagina 404, reindirizzare o aggiungere codice HTML personalizzato utilizzando l'opzione Pagina personalizzata. Se selezioni Reindirizzamento, dovrai specificare l'URL di destinazione.
Questo è l'HTML personalizzato che abbiamo utilizzato per il nostro scopo.
<!doctype html> <html> <head> <title>Nothing Here</title> <meta charset="utf-8"/> <meta name="robots" content="noindex"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> body { text-align: center; padding: 20px; font: 20px Helvetica, sans-serif; color: #333; } @media (min-width: 768px){ body{ padding-top: 150px; } } h1 { font-size: 50px; } article { display: block; text-align: left; max-width: 650px; margin: 0 auto; } </style> </head> <body> <article> <h1>Oops!</h1> <div> <p>Sorry for the inconvenience but you are not supposed to be here. You won't get anything here. This page was set for HowtoForge Nginx Proxy Manager Guide. Maybe, someday it will show something.</p> </div> </article> </body> </html>
Fare clic su Salva per terminare. La tua pagina di destinazione dovrebbe essere modificata in qualcosa di simile al seguente.
Passaggio 11: aggiornare Nginx Proxy Manager
Per aggiornare NPM, innanzitutto arrestare i contenitori.
$ cd ~/nginx-proxy $ docker-compose down --remove-orphans
Estrai le immagini più recenti.
$ docker-compose pull
Riavvia 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 host proxy per un altro contenitore docker, usarlo come servizio di reindirizzamento e controllare l'accesso utilizzandolo. Se hai domande, pubblicale nei commenti qui sotto.