GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come installare e utilizzare Nginx Proxy Manager con Docker

Un proxy inverso è un server Web che può essere posizionato di fronte a un altro server Web o un servizio Web. Può crittografare il traffico in uscita, fungere da bilanciamento del carico, reindirizzare il traffico e offrire protezione. Il server web Nginx può essere utilizzato come server proxy rispetto ai server tradizionali, ma a volte la configurazione può essere noiosa e causare problemi se non eseguita 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 tramite Let's Encrypt, supporto per più host, autenticazione HTTP, elenchi di accesso e 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:configurazione del firewall

Cent OS/Rocky Linux/Alma Linux

Dovresti avere il firewall Firewalld installato. 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

Passaggio 2 - Installa Docker

Cent OS/Rocky Linux/Alma Linux

Esegui il comando seguente 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

Esci dal sistema e accedi nuovamente per applicare la modifica.

Passaggio 3:installazione di Docker Compose

Scarica e installa Docker componi binario.

$ 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 l'autorizzazione eseguibile al file binario.

$ sudo chmod +x /usr/local/bin/docker-compose

Passaggio 4:crea un file di composizione Docker

Crea una directory per il gestore proxy Nginx.

$ mkdir ~/nginx-proxy

Passa alla directory.

$ cd ~/nginx-proxy

Crea directory per dati utente e certificati SSL.

$ mkdir {data,letsencrypt}

Crea e apri il docker-compose.yml file 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 del proxy manager 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 decommentando la 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 collegare il proxy manager e il database. Questo è facoltativo poiché viene creato automaticamente. Ma qui lo stiamo facendo manualmente assegnandogli un nome a nostra scelta.

Abbiamo aggiunto una rete esterna al container del proxy manager 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 qualsiasi container direttamente senza la necessità di esporre le sue porte al server.

Passaggio 5:esegui Nginx Proxy Manager

Prima di avviare il contenitore Docker, dobbiamo creare la rete esterna npm-nw . Le reti interne vengono create automaticamente. Esegui il comando seguente per creare la rete esterna.

$ docker network create npm-nw

Avvia il Docker Container usando 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 - Accedi 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: cambiami

Successivamente, ti verrà immediatamente chiesto di impostare un nome e un indirizzo email.

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

Fai clic su Salva pulsante di nuovo 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 l'accesso a Nginx Proxy Manager. Questo passaggio è facoltativo ma è utile se vuoi mettere l'applicazione dietro SSL.

Fai clic su Host>> Host proxy dal menu dashboard per aprire la pagina Host proxy. Da lì, fai clic su Aggiungi host proxy pulsante per procedere.

Aggiungi il nome FQDN (npm.example.com ) e fare 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 tendina. Seleziona le opzioni Forza SSL e Supporto HTTP/2 . Se vuoi abilitare HSTS, puoi abilitare anche quello. Se il tuo dominio è configurato tramite Cloudflare, non abilitare l'opzione Forza SSL in caso contrario, 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 su Salva pulsante 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 farlo in modo simile per la pagina di destinazione predefinita e assegnarlo 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, è tempo di metterlo in pratica. La prima cosa che faremo è usarlo per ospitare un'altra applicazione Web Docker. Per questo, installeremo il blog Ghost. Se vuoi saperne di più, dai un'occhiata al nostro tutorial sull'installazione di Ghost usando 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. Ciò ti aiuterà 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 codice seguente. Sostituisci example.com con il tuo nome di dominio effettivo 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 collegato il container Ghost con il proxy manager Nginx utilizzando la rete esterna npm-nw . In questo modo, non esporremo le porte di Ghost al sistema. Abbiamo anche utilizzato una rete interna ghost-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>> Proxy Host e aggiungi un nuovo host proxy.

Aggiungi il nome di dominio che hai scelto per il tuo blog Ghost. Per il Nome host/IP value, inserisci il nome del tuo container. 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 qui sopra.

Quindi, passa alla scheda SSL e crea un nuovo certificato SSL seguendo il passaggio 6. Poiché caricherai contenuti sul tuo blog Ghost, sarebbe opportuno impostare una dimensione massima di caricamento per i tuoi caricamenti.

Fortunatamente, NPM ti consente di aggiungere configurazioni personalizzate. Passa a Avanzate scheda e inserisci client_max_body_size 50m; nella casella.

Fai clic su 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:utilizza Nginx Proxy Manager come servizio di reindirizzamento

Vediamo come puoi utilizzare NPM per reindirizzare facilmente un dominio a un altro. Per farlo, visita la Dashboard>> Host>> Host di reindirizzamento . Da lì, fai clic su Aggiungi host di reindirizzamento pulsante per iniziare.

Inserisci il nome di dominio che vuoi 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 . Seleziona il Codice HTTP corretto e seleziona Preserva percorso e Blocca gli exploit comuni opzioni. Se stai utilizzando uno schema automatico o https, assicurati di aver selezionato o creato un certificato SSL utilizzando NPM. Fai clic su Salva per completare 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 usare Nginx Proxy Manager. Puoi usarlo come host 404, il che significa che puoi utilizzare un dominio come pagina di destinazione per mostrare ai motori di ricerca che le pagine del dominio non esistono. Il passaggio include solo l'inserimento di un dominio e la configurazione di SSL per esso. Puoi anche utilizzare questa come un'opportunità per tenere traccia dei registri per il nome di dominio e visualizzare il traffico dei referrer.

L'altra caratteristica consiste nell'usare NPM come host di flusso. È possibile utilizzare questa funzione per inoltrare le porte TCP/UDP a un altro computer della rete. Questo è utile se stai ospitando server di gioco. L'unica cosa necessaria è inserire la porta in entrata, il dominio di inoltro o l'indirizzo IP, la porta di inoltro e selezionare il tipo di porta.

Utilizza 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 porto .

Sotto Avanzate tab, entrare nella configurazione specificando la directory principale. Assicurati che la directory principale del sito sia montata nella configurazione iniziale di Docker Compose. Qui stiamo usando il /data/static directory per ospitare il nostro sito Web statico.

Fai clic su Salva per finire e il tuo sito dovrebbe essere accessibile. Allo stesso modo puoi ospitare qualsiasi tipo di sito utilizzando il gestore proxy.

Passaggio 10 - Funzioni varie

Utilizza la funzione di controllo degli accessi di Nginx Proxy Manager

È possibile utilizzare la funzione Elenchi di accesso di NPM per abilitare l'autenticazione HTTP o bloccare gli intervalli IP. Apri NPM e visita la Dashboard>> Elenchi di accesso pagina.

Fai clic su Aggiungi elenco di accesso pulsante per iniziare.

È possibile assegnare un nome alla configurazione dell'elenco di accesso (ACL). Il Soddisfa qualsiasi la scheda, se selezionata, consentirà l'accesso se il client soddisfa una qualsiasi delle condizioni specificate. Se un client supera l'autenticazione HTTP ma potrebbe non riuscire l'accesso basato su IP, sarà consentito. Ma se il Satisfy Any opzione è deselezionata, il cliente dovrà soddisfare tutte le condizioni.

L'Autorizzazione per il passaggio all'host la funzione inoltrerà la funzione di autenticazione al server host.

Successivamente, passa all'Autorizzazione scheda. Qui puoi creare un nome utente e una password per il metodo di autenticazione HTTP. Per aggiungere più di un utente, fai clic su Aggiungi pulsante. 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, vengono cancellati i dati dell'utente precedente.

Passa all'Accesso scheda. Qui puoi impostare a quali indirizzi IP deve essere concesso o negato l'accesso.

Fai clic su Salva per finire.

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 supporto per più nomi di dominio

Con l'aumento del numero di host e domini, il tuo Nginx potrebbe esaurire lo spazio hash o potrebbe incorrere in problemi di memoria. Possiamo aggiungere una configurazione personalizzata che si applicherà 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 comando seguente.

$ docker restart npm-app

Reindirizza pagina di destinazione predefinita

Al passaggio 6, viene visualizzata la pagina predefinita quando si digita l'URL http://<yourserverIP> . Se vuoi cambiarlo, è possibile farlo. Per farlo, visita la pagina delle impostazioni . Fai clic sui tre punti sul lato destro e fai clic su Modifica pulsante.

Puoi impostare la pagina di destinazione in modo che funga da pagina 404, reindirizzare la pagina o aggiungere 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>

Fai clic su Salva finire. La tua pagina di destinazione dovrebbe essere cambiata in qualcosa di simile alla seguente.

Passaggio 11 - Aggiorna Nginx Proxy Manager

Per aggiornare NPM, per prima cosa, interrompi i contenitori.

$ cd ~/nginx-proxy
$ docker-compose down --remove-orphans

Estrai le ultime immagini.

$ 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 usandolo. Se hai domande, pubblicale nei commenti qui sotto.


Ubuntu
  1. Come configurare e utilizzare NGINX come proxy inverso

  2. Come installare e configurare Nginx su CentOS 8

  3. Come installare e utilizzare Docker su Ubuntu 20.04

  4. Come installare e configurare Nginx su Ubuntu 20.04

  5. Come installare e utilizzare Docker in Ubuntu 20.04

Come installare WordPress 5.x con Nginx su Ubuntu 18.04 / Ubuntu 16.04

Come installare WordPress con Nginx su Ubuntu

Come installare Rocket.chat con proxy inverso nginx su Ubuntu 20.04

Come installare Portainer Docker Manager in Ubuntu 20.04

Come installare e utilizzare Conky Manager su Ubuntu

Come installare e utilizzare Docker su Ubuntu 20.04