Nginx Proxy Manager (NPM) es una interfaz web gratuita y de código abierto que coloca un panel amigable delante de Nginx, para que puedas apuntar un dominio a cualquier aplicación autoalojada y obtener un certificado automático de Let's Encrypt sin tocar jamás un archivo de configuración. Para configurarlo ejecutas un pequeño archivo de Docker Compose, abres el panel de administración en el puerto 81, añades un «proxy host» que asigna app.yourdomain.com a la dirección interna de un contenedor y solicitas el SSL con dos clics. Esta guía recorre el camino completo — instalación, primer inicio de sesión, tu primer proxy host, HTTPS gratuito y los dos errores con los que tropieza casi todo el mundo — y muestra dónde NPM es la herramienta adecuada frente a Caddy o un Cloudflare Tunnel.
¿Qué es Nginx Proxy Manager?
Nginx Proxy Manager es una imagen de Docker que envuelve Nginx y un panel web para que gestiones proxies inversos y certificados SSL desde un navegador en lugar de editar nginx.conf. Se publica bajo la licencia MIT y lo mantiene el desarrollador jc21; la documentación oficial lo describe como una forma de «reenviar a tus sitios web ejecutándose en casa o en otro lugar, incluido SSL gratuito, sin tener que saber demasiado sobre Nginx o Let's Encrypt». Se encarga del reenvío de dominios, las redirecciones, los hosts 404 y los flujos TCP/UDP en bruto, emite certificados gratuitos a través de Let's Encrypt y admite listas de acceso, autenticación HTTP básica y varios usuarios con registro de auditoría. Si autoalojas varios servicios en un solo servidor y quieres una forma de dar a cada uno un subdominio limpio con HTTPS con un par de clics, NPM está hecho exactamente para eso.
Antes de empezar
Necesitas tres cosas: un servidor con Docker y Docker Compose instalados, un nombre de dominio y registros DNS que apunten a la IP pública de tu servidor. NPM funciona en cualquier lugar donde funcione Docker — un VPS, un servidor doméstico o una Raspberry Pi (se admiten amd64 y arm64; el armv7 de 32 bits se descartó en la versión 2.14). Crea un registro A para cada servicio que quieras exponer, por ejemplo npm.yourdomain.com y nextcloud.yourdomain.com, ambos apuntando a la misma IP; NPM decide adónde va el tráfico según el nombre de host. Asegúrate de que los puertos 80 y 443 estén abiertos en tu firewall para que Let's Encrypt pueda validar certificados y los visitantes puedan llegar a tus sitios. Si aún no has protegido la máquina, hazlo primero — nuestra guía de la primera hora segura en un VPS cubre los pasos de firewall y SSH que NPM da por hechos.
Cómo instalar Nginx Proxy Manager con Docker Compose
Crea una carpeta, coloca dentro un docker-compose.yml y arráncalo. Las versiones recientes incluyen SQLite, así que ya no necesitas un contenedor MySQL aparte para una configuración básica — esta es la configuración mínima y actual de las instrucciones oficiales de instalación:
services:
npm:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # HTTP público
- '443:443' # HTTPS público
- '81:81' # interfaz de administración — mantenla fuera de Internet público
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Luego levántalo:
docker compose up -d
El primer arranque tarda un minuto o dos mientras NPM genera sus claves JWT, inicializa la base de datos y crea el usuario administrador predeterminado. La línea estable actual es la serie 2.15.x; fijar una etiqueta de versión en lugar de latest (por ejemplo jc21/nginx-proxy-manager:2.15.1) hace que las actualizaciones sean deliberadas y no automáticas. Los dos volúmenes son el único estado que importa — ./data contiene tus hosts y ajustes, ./letsencrypt contiene tus certificados — así que respaldar esas carpetas respalda toda tu configuración de NPM.
Primer inicio de sesión y protección del panel de administración
Abre http://your-server-ip:81 e inicia sesión con las credenciales predeterminadas que trae la documentación: correo [email protected], contraseña changeme. NPM te obliga a establecer de inmediato un correo real y una contraseña fuerte — hazlo, porque el puerto 81 es una superficie de administración sin autenticación hasta que lo hagas. El paso de fortalecimiento más importante con diferencia es no exponer nunca el puerto 81 a Internet público. Vincúlalo a localhost o a una interfaz privada, accede a él a través de una VPN o un túnel SSH, o restríngelo con una regla de firewall; si usas Tailscale o una malla similar, coloca la interfaz de administración solo en esa interfaz. Publicar el panel en una IP pública es el error más común de NPM y le entrega a un atacante toda tu tabla de enrutamiento. Los puertos 80 y 443 están pensados para dar la cara al mundo; el 81 no.
Cómo añadir tu primer proxy host
Un proxy host es una única regla que asigna un nombre de host público a un servicio interno. En el panel, abre Hosts → Proxy Hosts → Add Proxy Host y rellena cuatro campos: el Domain Name (nextcloud.yourdomain.com), el Scheme (http o https), el Forward Hostname/IP y el Forward Port. El detalle crítico: el nombre de host de reenvío es el nombre o la IP privada del contenedor de destino tal como se ve desde dentro de Docker, no localhost. Si NPM y tu aplicación comparten una red de Docker, usa el nombre del contenedor (nextcloud) y su puerto interno (80). Activa Block Common Exploits y habilita Websockets Support para cualquier cosa en tiempo real — paneles, apps de chat, herramientas de recarga en vivo — o no lograrán conectarse silenciosamente. Guarda, y NPM escribe la configuración de Nginx y la recarga en segundo plano. Repite esto una vez por servicio; cada subdominio se convierte en una entrada ordenada y gestionada individualmente en la lista.
Añadir SSL gratuito con Let's Encrypt
Abre la pestaña SSL del proxy host, elige Request a new SSL Certificate, marca Force SSL y HTTP/2, acepta los términos de Let's Encrypt y guarda. NPM completa el desafío HTTP-01 de Let's Encrypt a través del puerto 80, instala el certificado y lo renueva automáticamente antes de que caduque — sin tareas cron, sin comandos de certbot. Para un certificado comodín (*.yourdomain.com) debes usar en su lugar un desafío DNS, porque Let's Encrypt no emite comodines por HTTP. En la pestaña SSL, activa Use a DNS Challenge, elige tu proveedor (Cloudflare es la opción habitual) y pega un token de API con permisos para editar el DNS de esa zona — la propia guía de tokens de API de Cloudflare explica cómo crear uno con Zone:DNS:Edit. Un único certificado comodín cubre entonces todos los subdominios, de modo que no emites un certificado nuevo por cada aplicación. Este SSL integrado con renovación automática es, con diferencia, la mayor razón por la que la gente elige NPM frente a un Nginx configurado a mano.
Nginx Proxy Manager frente a Caddy frente a Cloudflare Tunnel
NPM no es la única forma de conseguir un proxy inverso con HTTPS automático. La elección correcta depende de si quieres una GUI, un archivo de configuración o ningún puerto abierto en absoluto.
| Herramienta | Estilo de configuración | HTTPS automático | Puertos abiertos necesarios | Ideal para |
|---|---|---|---|---|
| Nginx Proxy Manager | GUI web | Sí (Let's Encrypt) | 80, 443 | Homelabs y equipos que quieren configurar con clics |
| Caddy | Archivo de texto (Caddyfile) | Sí (integrado) | 80, 443 | Gente cómoda en la terminal que quiere la configuración en Git |
| Cloudflare Tunnel | Panel de Cloudflare | Sí (borde de Cloudflare) | Ninguno (solo saliente) | Exponer apps detrás de CGNAT o sin IP pública |
Elige NPM cuando valores un panel visual y gestiones más de un par de hosts. Prefiere Caddy si prefieres mantener un archivo de configuración versionado antes que hacer clics por una interfaz. Recurre a un Cloudflare Tunnel cuando no puedas abrir puertos entrantes en absoluto — detrás de CGNAT, una red doméstica bloqueada o un ISP residencial. Muchos autoalojadores ejecutan NPM y un túnel juntos: el túnel lleva el tráfico a la máquina, NPM lo enruta al contenedor correcto.
Solución de problemas: 502 Bad Gateway y certificados fallidos
Dos problemas explican la mayoría de los hilos de soporte de NPM. Un 502 Bad Gateway casi siempre significa que NPM no puede alcanzar la aplicación en la dirección que le diste. La solución es de red, no de NPM: el contenedor de destino y NPM deben compartir una red de Docker, y el nombre de host de reenvío debe ser el nombre del contenedor con su puerto interno — no localhost, 127.0.0.1 ni la IP pública del host, ninguno de los cuales resuelve al lugar correcto desde dentro del contenedor de NPM. Coloca ambos servicios en la misma red externa de Docker y referencia la aplicación por su nombre.
Un certificado SSL fallido suele reducirse a la accesibilidad: el DNS del dominio ya debe apuntar a tu servidor, y el puerto 80 debe estar abierto y reenviado para que Let's Encrypt pueda completar el desafío HTTP. Si el dominio está detrás del proxy de nube naranja de Cloudflare, el desafío HTTP-01 puede fallar — o bien cambia ese registro a DNS-only durante la emisión, o usa en su lugar el método de desafío DNS. También se aplican límites de tasa: Let's Encrypt limita los certificados por dominio y semana, así que deja de reintentar una solicitud rota y corrige primero la causa raíz.
Preguntas frecuentes
¿Nginx Proxy Manager es gratis?
Sí. Es totalmente de código abierto bajo la licencia MIT, sin nivel de pago ni funciones bloqueadas. El único coste es el servidor en el que lo ejecutas, y la propia imagen de Docker es gratuita para descargar y usar comercialmente.
¿Cuál es el inicio de sesión predeterminado de Nginx Proxy Manager?
La cuenta de administrador predeterminada es el correo [email protected] con la contraseña changeme. NPM te exige cambiar ambos por un correo real y una contraseña fuerte la primera vez que inicias sesión, y nunca deberías dejar los valores predeterminados en su lugar.
¿Qué puertos usa Nginx Proxy Manager?
Usa el puerto 80 para HTTP, el puerto 443 para HTTPS y el puerto 81 para el panel de administración. Los puertos 80 y 443 deben ser accesibles públicamente; el puerto 81 debe mantenerse privado y no exponerse nunca a Internet.
Nginx Proxy Manager frente a Caddy: ¿cuál es mejor?
Ninguno es estrictamente mejor; se adaptan a personas distintas. NPM te da una GUI de apuntar y hacer clic y es más fácil para principiantes y homelabs con varios hosts, mientras que Caddy usa una configuración de texto compacta más amigable con el control de versiones y la automatización. Ambos ofrecen HTTPS automático de Let's Encrypt.
¿Por qué Nginx Proxy Manager muestra 502 Bad Gateway?
Porque no puede alcanzar la aplicación de backend en la dirección configurada. Normalmente el contenedor y NPM no están en la misma red de Docker, o el host de reenvío está establecido en localhost en lugar del nombre del contenedor y su puerto interno. Corrige la red de Docker y el 502 desaparece.
Sources
- Nginx Proxy Manager — Instrucciones completas de instalación — Docker Compose, puertos y volúmenes oficiales
- Nginx Proxy Manager — Guía y funciones — lista de funciones, puerto de administración y descripción
- Nginx Proxy Manager en GitHub — licencia MIT, versiones y código fuente
- Let's Encrypt — la autoridad de certificación gratuita que usa NPM
- Cloudflare — Crear un token de API — token de desafío DNS para certificados comodín
Waqas Ahmed Waseer
Waqas Ahmed Waseer es desarrollador y creador de automatizaciones con más de 8 años construyendo sistemas en producción que usan más de 100.000 personas. Crea SaaS multiinquilino a medida, automatización con IA (n8n, flujos LLM, bots de WhatsApp) e infraestructura de hosting (WHM/cPanel, CloudLinux), y es el creador de WaSphere, FlowMaticX y la marca de hosting WaseerHost. Más de 100 proyectos entregados para pymes, agencias y startups financiadas.



