Vai al contenuto

NGINX Proxy Server

NGINX Proxy Server è un software open-source ampiamente utilizzato per la gestione del traffico web. Sviluppato da Igor Sysoev nel 2002, NGINX è noto per la sua architettura efficiente e scalabile, che lo rende una scelta popolare per le aziende di tutte le dimensioni. Il software funge da server web, server di posta elettronica e proxy inverso, e offre caratteristiche avanzate come il bilanciamento del carico, la cache, la compressione e l'elaborazione di più richieste contemporaneamente.

NGINX Proxy Server è progettato per gestire un numero elevato di connessioni simultanee con un basso consumo di memoria, il che lo rende particolarmente adatto per ambienti ad alto traffico. In qualità di proxy inverso, NGINX agisce come intermediario tra i client e i server, inoltrando le richieste dei client ai server appropriati e restituendo le risposte ai client. Questo approccio offre numerosi vantaggi, tra cui una maggiore affidabilità, sicurezza e prestazioni.


Docker Compose

Il codice Docker Compose seguente è stato sviluppato per creare due servizi distinti: il servizio NGINX Proxy e un database associato (MariaDB). Sebbene il database non sia essenziale per il funzionamento del servizio NGINX Proxy (basta eliminare le variabili), fornisce un supporto prezioso per la memorizzazione dei dati di configurazione necessari. Inoltre, risulta utile nel caso in cui si desideri eseguire un backup o migrare le configurazioni del proprio server proxy.

version: "3.8"

services:

    nginx-proxy-manager:
        image: 'jc21/nginx-proxy-manager:latest'
        container_name: nginx_reverse_proxy
        restart: always
        depends_on:
            - services_db
        ports:
            - "80:80"
            - "81:81"
            - '443:443'
        environment:
            TZ: Europe/Rome
            DB_MYSQL_HOST: services_db
            DB_MYSQL_PORT: 3306
            DB_MYSQL_NAME: ${MYSQL_DB_NAME}
            DB_MYSQL_USER: ${MYSQL_USERNAME}
            DB_MYSQL_PASSWORD: ${MYSQL_PASSWORD}
        volumes:
            - ./data:/data
            - ./letsencrypt:/etc/letsencrypt

    services_db:
        image: 'jc21/mariadb-aria:latest'
        container_name: nginx_reverse_proxy_database
        restart: always
        ports:
            - "3306:3306"
        environment:
            TZ: Europe/Rome
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            MYSQL_DATABASE: ${MYSQL_DB_NAME}
            MYSQL_USER: ${MYSQL_USERNAME}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD}
            MARIADB_AUTO_UPGRADE: '1'
        volumes:
            - ./mysql:/var/lib/mysql

Per motivi di sicurezza, genereremo anche un file .env che servirà a gestire le password in modo sicuro. Seguendo l'esempio precedente, possiamo vedere qui sotto l'inserimento della password che potremmo utilizzare. La password presente è solo un esempio e consiglio di cambiarla per poter verificare chi accede al server.

MYSQL_ROOT_PASSWORD=R0ot_53cr3t-P4ss0Rd
MYSQL_USERNAME=esempio-nginx-username
MYSQL_PASSWORD=53cr3t-P4ss0Rd
MYSQL_DB_NAME=nginx-database

Credenziali di Accesso

Una volta finalizzato il processo di installazione, le credenziali di accesso di default saranno:

  • Username: admin@example.com
  • Password: changeme

Dettaglio dei Servizi

Lo script in questione esegue il deploy di due servizi distinti all'interno del sistema, ovvero il servizio principale (NGINX) e il servizio di supporto (MariaDB), ognuno dei quali presenta specifiche caratteristiche e variabili.

NGINX Proxy Server

NGINX è il servizio principale dello script, responsabile della gestione del traffico web. Le sue caratteristiche includono il bilanciamento del carico, la cache, la compressione e l'elaborazione di più richieste contemporaneamente. Durante la fase di installazione del servizio, possiamo notare due caratteristiche importanti:

  • Avvio del Container: In primo luogo, la policy di avvio (depends_on) garantisce che il servizio venga avviato solo quando il database (DB) è attivo e funzionante. In secondo luogo, la policy di riavvio (restart) è impostata su "always", in modo che il servizio possa riattivarsi automaticamente in caso di problemi.

  • Persistenza dei Dati: Per quanto riguarda i volumi, ne sono stati creati due per rendere i dati persistenti. Il primo volume è destinato ai dati di configurazione, mentre il secondo è riservato ai certificati SSL. In questo modo, i dati essenziali per il funzionamento del servizio saranno preservati anche in caso di arresto o riavvio del sistema.

Le variabili che sono state impostate sono rispettivamente:

  • TZ - il fuso orario da utilizzare all'interno del contenitore. In questo caso, viene utilizzato il fuso orario Europe/Rome.

  • DB_MYSQL_HOST - l'indirizzo IP del server a cui il container deve collegarsi, in questo caso essendo all'interno dello stesso Docker Compose, possiamo andare ad utilizzare il nome del container stesso.

  • DB_MYSQL_PORT - la porta del Database, in questo caso è stata utilizzta la porta di riferimento standard 3306.

  • DB_MYSQL_NAME - il nome del database presente in MariaDB, dove il servizio dovrà andare a salvare i dati. Questo deve essere lo stesso tra i vari servizi.

  • DB_MYSQL_USER - il nome utente che NGINX dovrà utilizzare per accedere al DB, sia in lettura che in scrittura

  • DB_MYSQL_PASSWORD - la password dell'utente della variabile sopra, necessaria per accedere al Database.

MariaDB

MariaDB è il servizio di supporto utilizzato dallo script, che fornisce un database relazionale per la memorizzazione dei dati di configurazione del servizio NGINX. Le sue caratteristiche includono l'affidabilità, la scalabilità e la sicurezza. Durante la fase di installazione del servizio, possiamo notare due caratteristiche importanti:

  • Avvio del Container: Essendo il container di supporto, la policy di riavvio (restart) è impostata su "always", in modo che il servizio possa riattivarsi automaticamente in caso di problemi.

  • Persistenza dei Dati: Per quanto riguarda i volumi, ne è presente solo uno, con lo scopo di rendere i dati persistenti.

Le variabili che sono state impostate sono rispettivamente:

  • TZ - imposta il fuso orario per il servizio services_db. In questo caso, il fuso orario impostato è Europe/Rome.

  • MYSQL_ROOT_PASSWORD - imposta la password per l'utente root del database MariaDB.

  • MYSQL_DATABASE - imposta il nome del database creato dal servizio services_db.

  • MYSQL_USER - imposta il nome utente per l'accesso al database MariaDB.

  • MYSQL_PASSWORD - imposta la password per l'utente definito in MYSQL_USER.

  • MARIADB_AUTO_UPGRADE - imposta la politica di aggiornamento automatico del servizio services_db. In questo caso, il valore è impostato su 1, il che significa che l'aggiornamento automatico è abilitato.