GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo instalar y usar Nginx Proxy Manager con Docker

Un proxy inverso es un servidor web que puede ubicarse frente a otro servidor web o un servicio web. Puede cifrar el tráfico saliente, actuar como equilibrador de carga, redirigir el tráfico y ofrecer protección. El servidor web Nginx se puede usar como un servidor proxy frente a los servidores tradicionales, pero a veces configurarlo puede ser tedioso y causar problemas si no se hace correctamente.

Nginx Proxy Manager es una aplicación que facilita la configuración de Nginx como un servidor proxy al proporcionar una interfaz gráfica de usuario (GUI) con características como compatibilidad con SSL integrada mediante Let's Encrypt, compatibilidad con múltiples hosts, autenticación HTTP, listas de acceso y gestión.

Este tutorial le enseñará cómo instalar el administrador de proxy Nginx en un servidor Linux usando Docker. Cubriremos todas las distribuciones populares de Linux en un solo tutorial.

Requisitos

  • Un servidor Linux que ejecute Ubuntu/Debian/CentOS/Alma Linux/Rocky Linux con un mínimo de 1 GB de RAM.
  • Un usuario no root con privilegios sudo.
  • Un nombre de dominio completo (FQDN) como npm.example.com apuntando al servidor.

Paso 1:configurar el cortafuegos

CentOS/Rocky Linux/Alma Linux

Debe tener instalado el cortafuegos Firewalld. Compruebe el estado del cortafuegos.

$ sudo firewall-cmd --state
running

Abra los puertos 80, 81 y 443.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=81/tcp

Vuelva a cargar el cortafuegos para habilitar los cambios.

$ sudo firewall-cmd --reload

Ubuntu/Debian

Los sistemas Ubuntu y Debian usan ufw (cortafuegos sin complicaciones) de forma predeterminada.

Compruebe si el cortafuegos se está ejecutando.

$ sudo ufw status

Si se está ejecutando, abra los puertos 80, 81 y 443.

$ sudo ufw allow 80
$ sudo ufw allow 81
$ sudo ufw allow 443

Abra el puerto SSH si el cortafuegos no se está ejecutando.

$ sudo ufw allow "OpenSSH"

Habilite el firewall si no se está ejecutando.

$ sudo ufw enable

Si se está ejecutando, vuelva a cargarlo para aplicar los cambios.

$ sudo ufw reload

Paso 2:Instalar Docker

Cent OS/Rocky Linux/Alma Linux

Ejecute el siguiente comando para instalar 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

Habilite e inicie el servicio Docker.

$ sudo systemctl start docker --now

Agregue su nombre de usuario al grupo de Docker.

$ sudo usermod -aG docker $USER

Cierre sesión en el sistema y vuelva a iniciar sesión para aplicar el cambio.

Paso 3:instalar Docker Compose

Descargue e instale el binario de composición de 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

Aplicar permiso ejecutable al binario.

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

Paso 4:Crear archivo de composición de Docker

Cree un directorio para el administrador de proxy Nginx.

$ mkdir ~/nginx-proxy

Cambia al directorio.

$ cd ~/nginx-proxy

Cree directorios para datos de usuario y certificados SSL.

$ mkdir {data,letsencrypt}

Crea y abre docker-compose.yml archivo para editar.

$ nano docker-compose.yml

Pegue el siguiente código en él.

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

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Repasemos el archivo. La primera parte del archivo es donde importamos la imagen del administrador de proxy Nginx y configuramos algunas variables de entorno en forma de credenciales de la base de datos. También exponemos los puertos 80, 81 y 443 al servidor para el acceso. Puede exponer más puertos, como 21, para acceso FTP. Puede deshabilitar la compatibilidad con IPV6 descomentando la línea DISABLE_IPV6: 'true' . Hemos asignado varios directorios de nuestro host a Docker para almacenamiento de datos y SQL.

Estamos usando dos redes aquí. Una es la red interna npm-internal para conectar el administrador de proxy y la base de datos. Este es opcional ya que se crea automáticamente. Pero aquí, lo estamos haciendo manualmente dándole un nombre de nuestra elección.

Hemos agregado una red externa al contenedor del administrador de proxy llamada npm-nw . Esta red es esencial porque puede usarla para conectar el administrador de proxy a cualquier otro contenedor acoplable que instale. El uso de una red le permitirá conectar cualquier contenedor directamente sin necesidad de exponer sus puertos al servidor.

Paso 5:ejecutar Nginx Proxy Manager

Antes de lanzar el contenedor Docker, debemos crear la red externa npm-nw . Las redes internas se crean automáticamente. Ejecute el siguiente comando para crear la red externa.

$ docker network create npm-nw

Inicie Docker Container con el siguiente comando.

$ docker-compose up -d

Consulta el estado de los contenedores.

$ 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

Paso 6:acceder al administrador de proxy de Nginx

Ahora puede acceder a su administrador de proxy Nginx a través de la URL http://yourserverIP:81 . Debería obtener la siguiente pantalla de inicio de sesión.

Introduzca las siguientes credenciales predeterminadas para iniciar sesión.

Dirección de correo electrónico: [email protected] Contraseña: cámbiame

A continuación, se le pedirá inmediatamente que establezca un nombre y una dirección de correo electrónico.

Haz clic en Guardar y se le pedirá que establezca una nueva contraseña.

Haz clic en Guardar botón de nuevo, y ahora puede comenzar a usar la aplicación.

Si abre la URL http://yourserverIP en su navegador, se le llevará a una página predeterminada que ha establecido el administrador de proxy.

Paso 7:configurar el nombre de dominio y SSL para Nginx Proxy Manager

Establezcamos un nombre de dominio para acceder a Nginx Proxy Manager. Este paso es opcional pero es útil si desea poner la aplicación detrás de SSL.

Haga clic en Hosts>> Hosts proxy desde el menú del tablero para abrir la página Proxy Hosts. Desde allí, haga clic en Agregar host proxy botón para continuar.

Agregue el nombre FQDN (npm.example.com ) y haga clic en él. Ingrese la dirección IP de su servidor y 81 como el Puerto de reenvío .

Cambie a la pestaña SSL.

Seleccione Solicitar un nuevo certificado SSL del menú desplegable. Selecciona las opciones Forzar SSL y compatibilidad con HTTP/2 . Si desea habilitar HSTS, también puede habilitarlo. Si tienes tu dominio configurado a través de Cloudflare, no habilites la opción Forzar SSL de lo contrario, quedará atrapado en un bucle de redirección.

Ingrese su dirección de correo electrónico, acepte los Términos de servicio (TOS) de Let's Encrypt y haga clic en Guardar botón para terminar.

Su dominio debe estar vivo y funcionando. Intenta abrir https://npm.example.com en su navegador, y debería obtener la pantalla de inicio de sesión de Nginx Proxy Manager.

De manera similar, puede hacerlo para la página de destino predeterminada y asignarla a un nombre de dominio como https://example.com . Simplemente cambie el puerto de 81 a 81 mientras configura el servidor proxy.

Paso 8:use Nginx Proxy Manager con otra aplicación web de Docker

Ahora que hemos instalado el administrador de proxy, es hora de darle algún uso. Lo primero que haremos será usarlo para alojar otra aplicación web de Docker. Para ello, estaremos instalando el blog Ghost. Si desea obtener más información, consulte nuestro tutorial sobre cómo instalar Ghost usando Docker en un servidor Ubuntu.

Cree otro directorio para su blog Ghost.

$ mkdir ~/ghost

Cambia al directorio Ghost.

$ cd ~/ghost

Cree dos directorios para el contenido y la base de datos.

$ mkdir {content,mysql}

Incluso si está utilizando la misma imagen de MySQL, debe mantener los datos y sus contenedores separados de los del administrador de proxy. Esto ayudará a aislar cualquier problema con el que te puedas encontrar y te permitirá mover cosas en caso de que lo necesites.

Cree y abra el archivo de redacción de Docker para editarlo.

$ nano docker-compose.yml

Pegue el siguiente código. Reemplace example.com con su nombre de dominio real para su blog Ghost. Ingrese los detalles de SMTP si desea recibir correos electrónicos. Puede eliminarlos si no los necesita.

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

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Como puede ver, hemos conectado el contenedor Ghost con el administrador de proxy Nginx usando la red externa npm-nw . De esta manera, no estamos exponiendo los puertos de Ghost al sistema. También hemos utilizado una red interna ghost-network para conectar nuestra aplicación Ghost y el contenedor de base de datos correspondiente.

Inicie el contenedor.

$ docker-compose up -d

Configurar Ghost en Nginx Proxy Manager

Ahora, necesitamos configurar el proxy inverso para nuestra instalación de Ghost. Abra el administrador de Nginx Proxy en su navegador, vaya a Panel de control>> Hosts>> Host de proxy y agregue un nuevo servidor proxy.

Agregue el nombre de dominio que eligió para su blog Ghost. Para el nombre de host/IP valor, ingrese el nombre de su contenedor. En este caso, sería ghost-app . No podemos agregar la dirección IP aquí porque no hemos expuesto el puerto de Ghost al servidor y el proxy Nginx no podrá llegar a Ghost a través de la IP. Por lo tanto, usamos el nombre del contenedor, al que NPM puede acceder usando la red de Docker npm-nw , que creamos. Usa 2368 como puerto, el puerto predeterminado utilizado por Ghost Blog. Verifique las otras opciones como se muestra en la captura de pantalla anterior.

A continuación, cambie a la pestaña SSL y cree un nuevo certificado SSL siguiendo el paso 6. Dado que cargará contenido en su blog de Ghost, sería bueno establecer un tamaño de carga máximo para sus cargas.

Afortunadamente, NPM le permite agregar configuraciones personalizadas. Cambiar a Avanzado pestaña e ingrese client_max_body_size 50m; en la caja.

Haz clic en Guardar para terminar de agregar el servidor proxy. Debería poder acceder a su blog Ghost a través de la URL https://ghost.exampl.com

Paso 9:use Nginx Proxy Manager como servicio de redirección

Veamos cómo puede usar NPM para redirigir un dominio a otro fácilmente. Para hacerlo, visite Panel de control>> Hosts>> Hosts de redirección . Desde allí, haga clic en Agregar host de redirección botón para empezar.

Ingrese el nombre de dominio que desea reenviar. E ingrese el dominio de reenvío. El dominio de reenvío ya debería estar configurado. Deje el esquema como automático. Según sus requisitos, puede elegir http o https . Seleccione el código HTTP correcto y marque Preservar ruta y Bloquear exploits comunes opciones Si está usando un esquema automático o https, asegúrese de haber seleccionado o creado un certificado SSL usando NPM. Haz clic en Guardar para terminar de agregar su host de redirección.

Su dominio example.com debería comenzar a redirigir a blog.example.com .

Otros usos de Nginx Proxy Manager

Hay otras dos formas en las que puede usar Nginx Proxy Manager. Puede usarlo como host 404, lo que significa que puede usar un dominio como página de destino para mostrar a los motores de búsqueda que las páginas del dominio no existen. El paso incluye simplemente ingresar un dominio y configurar SSL para él. También puede usar esto como una oportunidad para rastrear los registros del nombre de dominio y ver el tráfico de referencia.

La otra característica es usar NPM como host de transmisión. Puede usar esta función para reenviar puertos TCP/UDP a otra computadora en la red. Esto es útil si está alojando servidores de juegos. Lo único que requiere es que ingrese el puerto entrante, el dominio de reenvío o la dirección IP, el puerto de reenvío y seleccione el tipo de puerto.

Use Nginx Proxy Manager para alojar un sitio web estático

Nginx Proxy Manager también puede alojar sitios web estáticos o dinámicos simples. Para hacerlo, agregue un nuevo host proxy y elija 127.0.0.1 como el dominio de reenvío y 80 como el puerto .

En Avanzado pestaña, ingrese a la configuración especificando el directorio raíz. Asegúrese de que el directorio raíz del sitio esté montado en la configuración de composición inicial de Docker. Aquí estamos usando el /data/static directorio para alojar nuestro sitio web estático.

Haz clic en Guardar para terminar, y su sitio debe ser accesible. De manera similar, puede alojar cualquier tipo de sitio utilizando el administrador de proxy.

Paso 10 - Funciones varias

Usar la función de control de acceso de Nginx Proxy Manager

Puede usar la función Listas de acceso de NPM para habilitar la autenticación HTTP o bloquear rangos de IP. Abra NPM y visite el Panel de control>> Listas de acceso página.

Haga clic en Agregar lista de acceso botón para empezar.

Puede nombrar su configuración de lista de acceso (ACL). Satisfacer cualquiera La pestaña, si está marcada, permitirá el acceso si el cliente cumple alguna de las condiciones especificadas. Si un cliente pasa la autenticación HTTP pero puede fallar el acceso basado en IP, se le permitirá. Pero si el Satisface Cualquiera está desmarcada, el cliente deberá cumplir con todas las condiciones.

Pasar autenticación al host La función reenviará la función de autenticación al servidor host.

A continuación, cambie a la Autorización pestaña. Aquí puede crear un nombre de usuario y una contraseña para el método de autenticación HTTP. Para agregar más de un usuario, haga clic en Agregar botón. Solo puede agregar hasta 5 usuarios. Y hay un error con el botón Agregar, así que use el botón primero y luego complete los detalles. Si completa los detalles y hace clic en el botón más tarde para agregar otro usuario, se borran los datos del usuario anterior.

Cambiar a Acceso pestaña. Aquí puede establecer qué direcciones IP se otorgarán o denegarán el acceso.

Haz clic en Guardar para terminar.

Para usar esta lista de acceso, debe seleccionarla al agregar su servidor proxy. Como en el ejemplo de Ghost Blog a continuación, hemos seleccionado nuestra lista de acceso.

Habilitar soporte para más nombres de dominio

A medida que aumenta la cantidad de hosts y dominios, es posible que su Nginx se quede sin espacio hash o tenga problemas de memoria. Podemos agregar una configuración personalizada que se aplicará a todos los hosts para resolver este problema.

Para ello, crea el directorio personalizado dentro de ~/nginx-proxy/data/nginx .

$ sudo mkdir ~/nginx-proxy/data/nginx/custom

Crea y abre el archivo http.conf dentro de este directorio.

$ sudo nano ~/nginx-proxy/data/nginx/custom/http.conf

Pegue las siguientes líneas en él.

proxy_headers_hash_max_size 1024;
proxy_headers_hash_bucket_size 128;

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Nginx debería aceptar automáticamente estos valores. Si no sucede, puede reiniciar el contenedor NPM con el siguiente comando.

$ docker restart npm-app

Redireccionar página de destino predeterminada

En el paso 6, verá la página predeterminada cuando escriba la URL http://<yourserverIP> . Si quieres cambiar eso, es posible hacerlo. Para ello, visita la página de configuración. . Haga clic en los tres puntos en el lado derecho y haga clic en Editar botón.

Puede configurar la página de destino para que actúe como una página 404, redireccionar la página o agregarle HTML personalizado mediante la opción Página personalizada. . Si selecciona Redireccionar , deberá especificar la URL de destino.

Este es el HTML personalizado que usamos para nuestro propósito.

<!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>

Haz clic en Guardar para terminar. Su página de destino debe cambiarse a algo como lo siguiente.

Paso 11:actualizar el administrador de proxy de Nginx

Para actualizar NPM, primero detenga los contenedores.

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

Obtenga las últimas imágenes.

$ docker-compose pull

Inicie los contenedores de nuevo.

$ docker-compose up -d

Conclusión

Esto concluye nuestro tutorial en el que instaló Nginx Proxy Manager y aprendió a usarlo para agregar un host proxy para otro contenedor docker, usarlo como un servicio de redirección y controlar el acceso al usarlo. Si tiene alguna pregunta, publíquela en los comentarios a continuación.


Ubuntu
  1. Cómo configurar y usar NGINX como proxy inverso

  2. Cómo instalar y configurar Nginx en CentOS 8

  3. Cómo instalar y usar Docker en Ubuntu 20.04

  4. Cómo instalar y configurar Nginx en Ubuntu 20.04

  5. Cómo instalar y usar Docker en Ubuntu 20.04

Cómo instalar WordPress 5.x con Nginx en Ubuntu 18.04 / Ubuntu 16.04

Cómo instalar WordPress con Nginx en Ubuntu

Cómo instalar Rocket.chat con proxy inverso nginx en Ubuntu 20.04

Cómo instalar Portainer Docker Manager en Ubuntu 20.04

Cómo instalar y usar Conky Manager en Ubuntu

Cómo instalar y usar Docker en Ubuntu 20.04