Nginx Proxy · 16 min read · Nov 20, 2025
Cómo instalar y usar Nginx Proxy Manager con Docker

Un proxy inverso es un servidor web que puede estar frente a otro servidor web o un servicio web. Puede cifrar el tráfico saliente, actuar como un balanceador de carga, redirigir el tráfico y ofrecer protección. El servidor web Nginx se puede usar como un servidor proxy frente a 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 soporte SSL integrado utilizando Let’s Encrypt, soporte para múltiples hosts, autenticación HTTP, listas de acceso y gestión de usuarios.
Este tutorial te 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 previos
- 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 completamente calificado (FQDN) como
npm.example.comapuntando al servidor.
Paso 1 - Configurar el Firewall
Cent OS/Rocky Linux/Alma Linux
Deberías tener instalado el firewall Firewalld. Verifica el estado del firewall.
$ sudo firewall-cmd --state
running
Abre 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
Recarga el firewall para habilitar los cambios.
$ sudo firewall-cmd --reload
Ubuntu/Debian
Los sistemas Ubuntu y Debian utilizan ufw (Uncomplicated Firewall) por defecto.
Verifica si el firewall está en funcionamiento.
$ sudo ufw status
Si está en funcionamiento, abre los puertos 80, 81 y 443.
$ sudo ufw allow 80
$ sudo ufw allow 81
$ sudo ufw allow 443
Abre el puerto SSH si el firewall no está en funcionamiento.
$ sudo ufw allow "OpenSSH"
Habilita el firewall si no está en funcionamiento.
$ sudo ufw enable
Si está en funcionamiento, recárgalo para aplicar los cambios.
$ sudo ufw reload
Paso 2 - Instalar Docker
Cent OS/Rocky Linux/Alma Linux
Ejecuta 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
Habilita y comienza el servicio de Docker.
$ sudo systemctl start docker --now
Agrega tu nombre de usuario al grupo de Docker.
$ sudo usermod -aG docker $USER
Cierra sesión del sistema y vuelve a iniciar sesión para aplicar el cambio.
Paso 3 - Instalar Docker Compose
Descarga e instala el binario de 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
Aplica permisos ejecutables al binario.
$ sudo chmod +x /usr/local/bin/docker-compose
Paso 4 - Crear archivo Docker Compose
Crea un directorio para el administrador de proxy Nginx.
$ mkdir ~/nginx-proxy
Cambia al directorio.
$ cd ~/nginx-proxy
Crea directorios para los datos de usuario y certificados SSL.
$ mkdir {data,letsencrypt}
Crea y abre el archivo docker-compose.yml para editar.
$ nano docker-compose.yml
Pega 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' # Puerto HTTP público
- '443:443' # Puerto HTTPS público
- '81:81' # Puerto web de administración
# Agrega cualquier otro puerto de Stream que desees exponer
# - '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"
# Descomenta la línea de abajo si IPv6 no está habilitado en tu 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
Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida.
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 base de datos. También exponemos los puertos 80, 81 y 443 al servidor para acceso. Puedes exponer más puertos, como el 21, para acceso FTP. Puedes desactivar el soporte de IPV6 descomentando la línea DISABLE_IPV6: 'true'. Hemos mapeado varios directorios de nuestro host al Docker para almacenamiento de datos y SQL.
Estamos utilizando dos redes aquí. Una es la red interna npm-internal para conectar el administrador de proxy y la base de datos. Esta 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 puedes usarla para conectar el administrador de proxy a cualquier otro contenedor de Docker que instales. Usar una red te permitirá conectar cualquier contenedor directamente sin necesidad de exponer sus puertos al servidor.
Paso 5 - Ejecutar Nginx Proxy Manager
Antes de lanzar el contenedor de Docker, necesitamos crear la red externa npm-nw. Las redes internas se crean automáticamente. Ejecuta el siguiente comando para crear la red externa.
$ docker network create npm-nw
Lanza el contenedor de Docker usando el siguiente comando.
$ docker-compose up -d
Verifica 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 a Nginx Proxy Manager
Ahora puedes acceder a tu administrador de proxy Nginx a través de la URL http://yourserverIP:81. Deberías obtener la siguiente pantalla de inicio de sesión.

Ingresa las siguientes credenciales predeterminadas para iniciar sesión.
Dirección de correo electrónico: [email protected] Contraseña: changeme
A continuación, se te pedirá que establezcas un nombre y una dirección de correo electrónico.

Haz clic en el botón Guardar, y se te pedirá que establezcas una nueva contraseña.

Haz clic en el botón Guardar nuevamente, y ahora puedes comenzar a usar la aplicación.

Si abres la URL http://yourserverIP en tu navegador, serás llevado a una página predeterminada que ha establecido el administrador de proxy.

Paso 7 - Configurar 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 deseas poner la aplicación detrás de SSL.
Haz clic en Hosts >> Proxy Hosts desde el menú del tablero para abrir la página de Proxy Hosts. Desde allí, haz clic en el botón Agregar Proxy Host para continuar.

Agrega el nombre FQDN ( npm.example.com) y haz clic en él. Ingresa la dirección IP de tu servidor y 81 como el Puerto de reenvío.
Cambia a la pestaña SSL.

Selecciona Solicitar un nuevo certificado SSL del menú desplegable. Selecciona las opciones Forzar SSL y Soporte HTTP/2. Si deseas habilitar HSTS, también puedes habilitar eso. Si tienes tu dominio configurado a través de Cloudflare, no habilites la opción Forzar SSL, de lo contrario, quedarás atrapado en un bucle de redirección.
Ingresa tu dirección de correo electrónico, acepta los Términos de Servicio (TOS) de Let’s Encrypt y haz clic en el botón Guardar para finalizar.

Tu dominio debería estar activo y funcionando. Intenta abrir https://npm.example.com en tu navegador, y deberías obtener la pantalla de inicio de sesión de Nginx Proxy Manager.
Puedes hacer lo mismo para la página de aterrizaje predeterminada y asignarle un nombre de dominio como https://example.com. Simplemente cambia el puerto de 81 a 81 mientras configuras el proxy host.
Paso 8 - Usar 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 es usarlo para alojar otra aplicación web de Docker. Para esto, instalaremos el blog Ghost. Si deseas aprender más, consulta nuestro tutorial sobre cómo instalar Ghost usando Docker en un servidor Ubuntu.
Crea otro directorio para tu blog Ghost.
$ mkdir ~/ghost
Cambia al directorio Ghost.
$ cd ~/ghost
Crea dos directorios para el contenido y la base de datos.
$ mkdir {content,mysql}
Incluso si estás usando la misma imagen de MySQL, deberías mantener los datos y sus contenedores separados de los del administrador de proxy. Esto ayudará a aislar cualquier problema que puedas encontrar y te permitirá mover cosas en caso de que lo necesites.
Crea y abre el archivo Docker compose para editar.
$ nano docker-compose.yml
Pega el siguiente código. Reemplaza example.com con tu nombre de dominio real para tu blog Ghost. Ingresa los detalles de SMTP si deseas recibir correos electrónicos. Puedes eliminarlos si no los necesitas.
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: {Tu host del servicio de correo}
mail__options__port: {Tu puerto del servicio de correo}
mail__options__secureConnection: {true/false}
mail__options__service: {Tu servicio de correo}
mail__options__auth__user: {Tu nombre de usuario}
mail__options__auth__pass: {Tu contraseña}
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
Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida.
Como puedes 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.
Inicia el contenedor.
$ docker-compose up -d
Configurar Ghost en Nginx Proxy Manager
Ahora, necesitamos establecer el proxy inverso para nuestra instalación de Ghost. Abre el administrador de proxy Nginx en tu navegador, ve a Tablero >> Hosts >> Proxy Host, y agrega un nuevo Proxy Host.

Agrega el nombre de dominio que elegiste para tu blog Ghost. Para el valor de Hostname/IP, ingresa el nombre de tu 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á alcanzar Ghost a través de la IP. Por lo tanto, usamos el nombre del contenedor, al que NPM puede acceder utilizando la red de Docker npm-nw, que creamos. Usa 2368 como el puerto, el puerto predeterminado utilizado por el blog Ghost. Verifica las otras opciones como se muestra en la captura de pantalla anterior.
A continuación, cambia a la pestaña SSL y crea un nuevo certificado SSL siguiendo el paso 6. Dado que estarás subiendo contenido a tu blog Ghost, sería bueno establecer un tamaño máximo de carga para tus subidas.
Afortunadamente, NPM te permite agregar configuraciones personalizadas. Cambia a la pestaña Avanzado y escribe client_max_body_size 50m; en el cuadro.

Haz clic en el botón Guardar para finalizar la adición del proxy host. Deberías poder acceder a tu blog Ghost a través de la URL https://ghost.exampl.com

Paso 9 - Usar Nginx Proxy Manager como un servicio de redirección
Veamos cómo puedes usar NPM para redirigir un dominio a otro fácilmente. Para hacerlo, visita Tablero >> Hosts >> Redirection Hosts. Desde allí, haz clic en el botón Agregar Redirection Host para comenzar.

Ingresa el nombre de dominio que deseas reenviar. Y escribe el dominio de reenvío. El dominio de reenvío ya debería estar configurado. Deja el esquema como automático. Dependiendo de tu requerimiento, puedes elegir http o https. Selecciona el Código HTTP correcto y marca las opciones Preservar ruta y Bloquear exploits comunes. Si estás usando un esquema automático o https, asegúrate de haber seleccionado o creado un certificado SSL usando NPM. Haz clic en Guardar para finalizar la adición de tu host de redirección.
Tu 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 puedes usar Nginx Proxy Manager. Puedes usarlo como un host 404, lo que significa que puedes usar un dominio como una página de aterrizaje para mostrar a los motores de búsqueda que las páginas del dominio no existen. El paso incluye solo ingresar un dominio y configurar SSL para él. También puedes 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 un host de stream. Puedes usar esta función para reenviar puertos TCP/UDP a otra computadora en la red. Esto es útil si estás alojando servidores de juegos. Lo único que requiere es que ingreses el puerto de entrada, el dominio o dirección IP de reenvío, el puerto de reenvío y selecciones el tipo de puerto.

Usar Nginx Proxy Manager para alojar un sitio web estático
Nginx Proxy Manager también puede alojar sitios web simples estáticos o dinámicos. Para hacerlo, agrega un nuevo proxy host y elige 127.0.0.1 como el Dominio de reenvío y 80 como el puerto.

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

Haz clic en Guardar para finalizar, y tu sitio debería ser accesible. Puedes alojar cualquier tipo de sitio utilizando el administrador de proxy de manera similar.

Paso 10 - Características varias
Usar la función de control de acceso de Nginx Proxy Manager
Puedes usar la función de Listas de Acceso de NPM para habilitar la autenticación HTTP o bloquear rangos de IP. Abre NPM y visita la página Tablero >> Listas de Acceso.
Haz clic en el botón Agregar Lista de Acceso para comenzar.

Puedes nombrar tu configuración de Lista de Acceso (ACL). La pestaña Satisfacer Cualquiera, si está marcada, permitirá el acceso si el cliente cumple con cualquiera 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 la opción Satisfacer Cualquiera no está marcada, el cliente deberá cumplir con todas las condiciones.
La función Pasar Auth al Host enviará la función de autenticación al servidor host.
A continuación, cambia a la pestaña Autorización. Aquí puedes crear un nombre de usuario y una contraseña para el método de autenticación HTTP. Para agregar más de un usuario, haz clic en el botón Agregar. Solo puedes agregar hasta 5 usuarios. Y hay un error con el botón Agregar, así que usa el botón primero y luego completa los detalles. Si completas los detalles y haces clic en el botón más tarde para agregar otro usuario, borrará los datos del usuario anterior.

Cambia a la pestaña Acceso. Aquí puedes establecer qué direcciones IP deben ser otorgadas o denegadas acceso.

Haz clic en Guardar para finalizar.
Para usar esta lista de acceso, necesitas seleccionarla al agregar tu proxy host. Como en el ejemplo para el blog Ghost a continuación, hemos seleccionado nuestra lista de acceso.

Habilitar soporte para más nombres de dominio
A medida que aumenta el número de hosts y dominios, tu Nginx puede quedarse sin espacio de hash o puede tener problemas de memoria. Podemos agregar una configuración personalizada que se aplicará a todos los hosts para resolver este problema.
Para hacer esto, crea el directorio custom 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
Pega las siguientes líneas en él.
proxy_headers_hash_max_size 1024;
proxy_headers_hash_bucket_size 128;
Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida.
Nginx debería aceptar automáticamente estos valores. Si no sucede, puedes reiniciar el contenedor NPM usando el siguiente comando.
$ docker restart npm-app
Redirigir la página de aterrizaje predeterminada
En el paso 6, ves la página predeterminada cuando escribes la URL http://. Si deseas cambiar eso, es posible hacerlo. Para hacerlo, visita la Página de Configuración. Haz clic en los tres puntos en el lado derecho y haz clic en el botón Editar.

Puedes establecer la página de aterrizaje para que actúe como una página 404, página de redirección, o agregar HTML personalizado a ella utilizando la opción Página Personalizada. Si seleccionas Redirigir, necesitarás especificar la URL de destino.

Este es el HTML personalizado que usamos para nuestro propósito.
No hay nada aquí
¡Ups!
Lo sentimos por las molestias, pero no se supone que debas estar aquí. No obtendrás nada aquí. Esta página fue configurada para la Guía de Nginx Proxy Manager de HowtoForge. Tal vez, algún día muestre algo.
Haz clic en Guardar para finalizar. Tu página de aterrizaje debería cambiar a algo como lo siguiente.

Paso 11 - Actualizar Nginx Proxy Manager
Para actualizar NPM, primero detén los contenedores.
$ cd ~/nginx-proxy
$ docker-compose down --remove-orphans
Descarga las imágenes más recientes.
$ docker-compose pull
Inicia nuevamente los contenedores.
$ docker-compose up -d
Conclusión
Esto concluye nuestro tutorial donde instalaste Nginx Proxy Manager y aprendiste cómo usarlo para agregar un proxy host para otro contenedor de Docker, usarlo como un servicio de redirección y controlar el acceso usando él. Si tienes alguna pregunta, publícalas en los comentarios a continuación.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.