Tienes un VPS con cinco o seis servicios Docker: Nextcloud, Uptime Kuma, un blog de Ghost, quizá un Vaultwarden. Una IP pública. Y quieres cada uno en su propio subdominio con HTTPS, sin editar a mano los archivos de configuración de Nginx cada vez que añades un contenedor. Ese es exactamente el problema que Nginx Proxy Manager existe para resolver.
Esta es una reseña y una configuración completa de Nginx Proxy Manager en un VPS en una sola guía. Nginx Proxy Manager (NPM) es una aplicación Docker que envuelve Nginx en una interfaz web: apuntas subdominios a contenedores de backend y solicitas certificados de Let's Encrypt a través de un panel en lugar de escribir directivas a mano. La guía está dirigida a quienes se autoalojan y a administradores de sistemas que ya ejecutan Docker y ahora necesitan un proxy inverso que no requiera tocar nginx.conf.
Al final sabrás si NPM se ajusta a tu caso, lo tendrás funcionando con HTTPS en tu VPS y conocerás los criterios para cambiar a Caddy o Traefik cuando NPM deje de ser la herramienta adecuada.
La versión corta
- Qué es NPM: una aplicación Docker que coloca una interfaz web sobre Nginx para gestionar hosts proxy y HTTPS automático con Let's Encrypt. Se adapta a quienes quieren una GUI y ejecutan un stack de servicios pequeño y bastante estático.
- Los compromisos: la configuración reside en una base de datos SQLite, por lo que no se puede versionar ni comparar (diff) como un archivo de configuración. A fecha del 12 de julio de 2026, la última versión etiquetada está afectada por CVE-2026-40519, así que los nuevos despliegues deberían esperar a una versión etiquetada que contenga la corrección. Su panel de administración en el puerto 81 es lo principal que hay que asegurar.
- Dimensionamiento: NPM en sí consume en reposo alrededor de 50 MB de RAM. Un VPS de 1 GB es la base práctica; 2 GB resulta cómodo una vez que añades los servicios que hay detrás.
- Cuándo cambiar: quédate con NPM para un stack pequeño y en su mayoría estático donde una GUI importa. Usa Caddy cuando quieras configuración como código y una huella menor. Usa Traefik cuando los cambios frecuentes de contenedores hagan que el autodescubrimiento de Docker sea más valioso que el registro manual de hosts.
Lo que esta guía no cubre
Esta es una guía de despliegue en un VPS, no un manual de referencia. Para mantenerla centrada, lo siguiente queda fuera de alcance:
- Personalización profunda de directivas de Nginx (bloques location personalizados más allá de lo que expone la interfaz de NPM).
- Arquitectura de balanceo de carga a escala.
- Comparación de ingress de Kubernetes.
- NPM en Windows.
- La vía de Cloudflare Tunnel para montajes sin IP estática.
Qué hace Nginx Proxy Manager (y dónde te puede jugar una mala pasada)
Nginx Proxy Manager es una aplicación Docker que ejecuta Nginx por debajo y añade un panel web por encima. Creas hosts proxy (subdominio hacia contenedor de backend y puerto) y solicitas certificados de Let's Encrypt a través de formularios en lugar de archivos de configuración. Se adapta a un stack pequeño y bastante estático de aplicaciones autoalojadas en un solo VPS.
Más allá de lo básico, el panel también gestiona listas de acceso y reenvío de flujos TCP/UDP en bruto. Para un stack de aplicaciones en un solo VPS, eso es una comodidad real: añades un contenedor, abres el panel, apuntas un subdominio hacia él, haces clic para emitir un certificado. Listo.
El principal compromiso es que la configuración que sirve como fuente de verdad de NPM reside de forma predeterminada en una base de datos SQLite. NPM sí genera archivos de Nginx legibles en /data/nginx/proxy_host/, pero esos archivos son artefactos generados en lugar de la configuración declarativa que editas y versionas. Puedes inspeccionarlos, pero no son un sustituto limpio de un Caddyfile o de las etiquetas de Traefik, y la forma fiable de reproducir el despliegue es restaurar los volúmenes de datos y de certificados de NPM. Para un stack pequeño y estático, eso puede ser aceptable. Para un flujo de trabajo de infraestructura gestionado con Git, es una limitación real.
A fecha del 12 de julio de 2026, la última versión etiquetada es la v2.15.1, publicada el 3 de junio de 2026. El proyecto sigue activo y con licencia MIT, pero su situación de seguridad actual necesita una advertencia importante: NVD lista las versiones de la 2.9.14 a la 2.15.1 como afectadas por CVE-2026-40519, una vulnerabilidad de inyección de comandos autenticada corregida en el commit a5db5ed pero que aún no se ha incluido en una versión etiquetada más reciente. Antes de desplegar, consulta la página de versiones y usa la primera versión etiquetada que contenga esa corrección. NPM tiene mantenimiento, pero la v2.15.1 no debería describirse actualmente como totalmente parcheada.
En cuanto a la huella, NPM consume en reposo aproximadamente 50 MB de RAM según la comparativa de proxies inversos de byte-guard. Eso es lo bastante ligero como para que NPM casi nunca sea lo que sobrecarga tu VPS. Los servicios que hay detrás sí lo son.
Mi opinión: NPM es una opción razonable en 2026 si quieres una GUI y ejecutas un stack de Docker pequeño. Si vives en el control de versiones y quieres la configuración de tu proxy en Git, mira Caddy en su lugar. La configuración respaldada por SQLite es el factor decisivo, no que haya nada malo en el proxy en sí.
NPM cambia la portabilidad de la configuración por una GUI. Ese intercambio está bien para un stack pequeño y estático y resulta molesto para un flujo de trabajo gestionado con Git.
NPM vs Caddy vs Traefik: qué proxy inverso encaja con tu VPS
Las tres herramientas se dividen a lo largo de cuatro ejes que determinan la elección: cómo se configuran, cómo gestionan HTTPS, cómo escalan con el número de servicios y cuánta RAM consumen en reposo. Aquí tienes la comparación.
| Parámetro | Gestor de Proxy Nginx | Caddy | Traefik |
|---|---|---|---|
| Modelo de configuración | GUI web, almacenada en SQLite | Caddyfile (texto, versionable) | Etiquetas de Docker / YAML |
| HTTPS automático | Sí, se solicita por host en la interfaz | Sí, por defecto, sin configuración | Sí, requiere configuración de resolutor ACME |
| Autodescubrimiento de Docker | No | No | Sí, mediante etiquetas de contenedor |
| RAM en reposo | ~50 MB | ~30 MB | ~80 MB |
| Caso más adecuado | Usuarios de GUI, stacks pequeños/estáticos | Configuración como código, menor huella | Stacks de Docker dinámicos con cambios frecuentes de contenedores |
Las cifras de RAM en reposo son observaciones aproximadas de una comparación de 2026, no requisitos fijos. El uso real varía según la versión de la imagen, las funciones habilitadas, el tráfico y el registro.
Los criterios para cambiar se derivan directamente de esa tabla. Si quieres un panel y ejecutas un puñado de servicios que no cambian a menudo, NPM es la herramienta adecuada. Si prefieres la configuración como código, quieres la menor huella posible o valoras el aprovisionamiento y renovación automáticos de HTTPS de Caddy sin configuración de ACME, usa Caddy. Yo mismo recurro a Caddy en despliegues de un solo sitio porque la gestión de SSL es automática y el Caddyfile es corto. Si añades, eliminas o redespliegas contenedores con frecuencia, el autodescubrimiento basado en etiquetas de Traefik hace que dejes de registrar a mano cada nuevo host.
También está Nginx puro con Certbot, que algunos administradores prefieren para un control preciso o despliegues sin Docker. Certbot puede automatizar la renovación de certificados, pero sigues gestionando tú mismo el enrutamiento de hosts virtuales y la configuración de Nginx. Si tu principal motivo para considerar NPM es evitar la configuración manual del proxy, es poco probable que Nginx puro sea la mejor opción.
Una nota sobre la elección: la comparativa de byte-guard sitúa a Caddy como la opción más ligera de esa comparación, y para un montaje nuevo de un solo host en 2026 esa es una elección razonable. Caddy gana por ser más ligero que NPM, pero si quieres específicamente una GUI, no es tu mejor apuesta.
Para una comparación más profunda de los motores subyacentes, consulta la comparación de Caddy vs Nginx en un VPS.
Requisitos previos: lo que necesitarás
Antes de desplegar, ten esto preparado. Es una lista corta, pero si te saltas cualquier elemento, el paso del certificado fallará más adelante.
- Un VPS con Docker y Docker Compose instalados (Ubuntu 22.04 LTS o Debian 12 sirven).
- Un nombre de dominio, con un registro DNS A (y AAAA si usas IPv6) apuntando a la IP pública de tu VPS.
- Acceso SSH al VPS.
- Los puertos 80 y 443 abiertos a Internet en tu firewall.
- El puerto 81 accesible solo por ti, no abierto al público (se trata en la sección de seguridad).
Configuración de Nginx Proxy Manager en tu VPS con Docker Compose
Esta sección despliega NPM usando Docker Compose. Una vez que tus registros DNS resuelven al VPS, la configuración del contenedor en sí es rápida, aunque la propagación de DNS y la emisión de certificados pueden tardar más.
La configuración usa un archivo de Docker Compose y un comando único para crear una red Docker compartida. Crea un directorio, crea la red, añade el docker-compose.yml archivo de abajo y levanta el contenedor.
Primero, crea la red Docker compartida:
docker network create proxy
Luego crea el siguiente docker-compose.yml archivo:
# docker-compose.yml
services:
npm:
image: 'jc21/nginx-proxy-manager:<PATCHED_VERSION>'
restart: unless-stopped
ports:
- '80:80' # public HTTP
- '443:443' # public HTTPS
- '127.0.0.1:81:81' # admin UI, reachable only from the VPS itself
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
- proxy
networks:
proxy:
external: true
Conecta cada contenedor de backend que NPM deba alcanzar por nombre de servicio a la misma red externa proxy . Esto permite que NPM resuelva el contenedor por su nombre de servicio sin publicar el puerto de la aplicación de backend en el VPS.
Haz una copia de seguridad de ambos ./data y ./letsencrypt antes de las actualizaciones. El directorio de datos contiene la base de datos de NPM y la configuración generada, mientras que el directorio de Let's Encrypt contiene su material de certificados.
Algunas cosas sobre este archivo. La imagen usa por defecto una base de datos SQLite almacenada en el ./data volumen. Ese es el backend predeterminado y es correcto para la mayoría de los despliegues en un solo VPS. Si necesitas una base de datos externa, NPM admite MariaDB/MySQL y PostgreSQL, lo que implica añadir un servicio de base de datos y las variables de entorno correspondientes. Para un solo VPS, SQLite sigue siendo la opción predeterminada más sencilla a menos que tengas una razón clara para sacar la base de datos del volumen de datos. La restart: unless-stopped política significa que NPM vuelve a levantarse si el VPS se reinicia, que es lo que quieres para un servicio que se sitúa delante de todo lo demás.
Levántalo y confirma que está en ejecución:
docker compose up -d
docker compose ps
Salida esperada: el npm contenedor con estado Up, los puertos 80 y 443 mapeados públicamente, y el puerto 81 vinculado solo a 127.0.0.1. El primer arranque tarda un par de minutos mientras NPM genera una clave JWT, inicializa la base de datos y crea el usuario administrador predeterminado. Los documentos de configuración oficiales describen esta secuencia de primer arranque.
Crea un túnel SSH desde tu ordenador local antes de abrir la interfaz de administración:
ssh -L 8181:127.0.0.1:81 user@your-vps
Luego abre http://127.0.0.1:8181 en tu navegador. En una instalación nueva, inicia sesión con [email protected] y changeme, luego reemplaza de inmediato el correo electrónico y la contraseña predeterminados. No hagas que el panel sea accesible públicamente mientras las credenciales predeterminadas estén activas.
Una vez que hayas cambiado las credenciales de administrador, añade tu primer host proxy:
- En el panel, ve a Hosts, luego Proxy Hosts, luego Add Proxy Host.
- Configura el Domain Name a tu subdominio (por ejemplo
cloud.example.com). - Establece Forward Hostname / IP al nombre o IP del contenedor de backend, y Forward Port al puerto en el que escucha.
- Guarda. El host proxy aparece en la lista, y el tráfico a ese subdominio ahora llega a tu contenedor.
Si ejecutas una interfaz de gestión de Docker junto a esto, se aplica el mismo patrón: apunta un subdominio hacia la herramienta de gestión de contenedores de la misma forma, y haz lo mismo para un stack de monitorización con Prometheus y Grafana que quieras situar detrás del proxy.
Configuración de HTTPS automático para un subdominio
Esta sección te consigue un certificado de Let's Encrypt válido y de renovación automática para tu subdominio. El requisito previo es el que suele pillar a la gente: el registro DNS A de ese subdominio ya tiene que apuntar a tu VPS, y el puerto 80 tiene que ser accesible desde Internet, porque Let's Encrypt verifica el dominio conectándose de vuelta a él.
Con el host proxy creado, solicita el certificado:
- Edita el host proxy, abre la SSL .
- En Certificado SSL, elige Request a new SSL Certificate.
- Activar Force SSL y HTTP/2 Support. Activa HSTS solo después de confirmar que HTTPS funciona correctamente, porque los navegadores pueden almacenar en caché la política y dificultar la recuperación de un error de certificado o de configuración del proxy.
- Acepta los términos de Let's Encrypt y guarda.
Por defecto, NPM usa el desafío HTTP-01 para nombres sin comodín, validando cada nombre de host solicitado a través del puerto 80. Un certificado puede contener varios nombres sin comodín, pero HTTP-01 no puede emitir certificados comodín. Los nombres comodín como *.example.com requieren el desafío DNS-01 con un proveedor de DNS compatible. Para un montaje normal de un subdominio por servicio, HTTP-01 es todo lo que necesitas, y las renovaciones son automáticas.
Si la solicitud de certificado falla, comprueba primero el puerto 80. Las causas comunes incluyen un puerto 80 inaccesible, una regla de firewall en la nube o de grupo de seguridad incorrecta, y un DNS que no ha terminado de propagarse. Let's Encrypt no puede validar un dominio que no puede alcanzar.
Protección del panel de administración de NPM en un VPS
La interfaz de administración en el puerto 81 es la principal exposición de un despliegue de NPM, y esta sección la asegura. Esto es un endurecimiento operativo, no una auditoría de seguridad: tres cosas, hechas una vez, y el perfil de riesgo baja drásticamente.
Primero, y más importante, mantén el puerto 81 vinculado a 127.0.0.1 como se muestra en el archivo de Docker Compose. Accede al panel a través del túnel SSH descrito antes. Si necesitas acceso remoto persistente, haz que la interfaz de administración sea accesible solo a través de una VPN privada. No publiques el puerto 81 en la IP pública del VPS.
Segundo, habilita la autenticación de dos factores TOTP en tu cuenta de administrador. NPM añadió el 2FA basado en TOTP en la versión 2.13.6, así que cualquier instalación actual lo tiene. Actívalo.
Tercero, mantén NPM parcheado y verifica la versión exacta en lugar de asumir que la etiqueta latest es segura. CVE-2026-40519 afecta a las versiones de la 2.9.14 a la 2.15.1 y puede permitir la ejecución remota de código autenticada mediante credenciales maliciosas de proveedor de DNS. CVE-2026-50892 afecta a la v2.14.0 y puede permitir que un atacante autenticado obtenga el material de clave privada de Let's Encrypt. Un problema anterior, CVE-2025-50579, afectaba a la v2.12.3 a través de un fallo de CORS que podía exponer tokens JWT. La regla práctica es sencilla: mantén el puerto 81 privado, habilita la autenticación de dos factores, fija una versión parcheada conocida y verifica los avisos de seguridad antes de actualizar.
El puerto 81 permanece privado y NPM permanece parcheado. Haz esas dos cosas y los principales riesgos conocidos se vuelven mucho más fáciles de gestionar para un montaje normal de un solo VPS.
Dimensionamiento de tu VPS para Nginx Proxy Manager
NPM en sí es ligero; la cuestión del dimensionamiento tiene que ver en realidad con NPM más los servicios que hay detrás. La huella en reposo del proxy rara vez es la restricción. Una instancia de Nextcloud o un blog de Ghost usarán más recursos que el propio proxy.
Así funcionan los niveles en la práctica:
- Base práctica mínima: 1 GB RAM, 1 vCPU y 10 GB de almacenamiento. Uno guía de dimensionamiento de terceros usa la misma base, pero tómala como orientación de planificación en lugar de como un requisito oficial de NPM. Es suficiente para NPM, el sistema operativo y unos pocos servicios ligeros, pero deja un margen limitado.
- Cómodo: 2 GB RAM, 1 vCPU, 20 GB de almacenamiento. NPM más tres a cinco servicios con espacio para respirar. Este es el punto óptimo para la mayoría de quienes se autoalojan.
- Un nivel más: 4 GB RAM, 2 vCPU. Para ocho a doce servicios, o un montaje con tráfico significativo donde quieres margen de CPU para la terminación de TLS.
La cifra sobre la que dimensionas es la suma de las aplicaciones tras el proxy, no NPM. Suma las huellas de RAM de los servicios que piensas ejecutar, añade encima la pequeña sobrecarga en reposo del proxy y elige con margen el nivel superior a eso.
Dimensionar el servidor es la parte fácil. Poner NPM en marcha sigue implicando aprovisionar el VPS, instalar Docker, descargar la imagen y recorrer esa configuración de primer arranque. Si prefieres saltarte los pasos de aprovisionamiento, el marketplace de Cloudzy tiene un despliegue de un clic de Nginx Proxy Manager en un VPS con NVMe. Levanta el contenedor en un servidor nuevo, así que vas directo al panel y a tu primer host proxy. En cualquier caso, los niveles de dimensionamiento de arriba son sobre los que aprovisionas.
Preguntas frecuentes
¿Cuál es la diferencia entre Nginx y Nginx Proxy Manager?
Nginx es el servidor web y el motor de proxy inverso en sí, que configuras editando archivos de texto. Nginx Proxy Manager es una aplicación Docker que ejecuta Nginx por debajo y añade una interfaz web por encima, de modo que gestionas hosts proxy y certificados de Let's Encrypt a través de un panel en lugar de escribir archivos de configuración. NPM es la capa de GUI; Nginx es el motor que hace el trabajo.
¿Sigue mereciendo la pena usar Nginx Proxy Manager en 2026?
Sí, para usuarios que prefieren una GUI y ejecutan un stack de Docker pequeño, pero solo después de verificar que la imagen que despliegas incluye las últimas correcciones de seguridad. A fecha del 12 de julio de 2026, la v2.15.1 es la última versión etiquetada, y NVD la lista como afectada por CVE-2026-40519. Si prefieres la configuración como código, Caddy sigue siendo la mejor opción; la configuración respaldada por SQLite de NPM es su principal limitación operativa.
¿Cuál es la RAM mínima para Nginx Proxy Manager?
NPM en sí consume en reposo aproximadamente 50 MB de RAM. Un VPS de 1 GB es una base práctica, suficiente para NPM más un par de servicios ligeros. 2 GB resulta cómodo una vez que añades más aplicaciones tras el proxy. El requisito real de RAM lo determinan los servicios que hay detrás de NPM, no NPM en sí.
¿Debería exponer el puerto 81 a Internet?
No. Mantén el puerto 81 vinculado a localhost y accede a él a través de un túnel SSH, o hazlo accesible solo a través de una VPN privada. No publiques la interfaz de administración en la IP pública del VPS.
¿Puedo ejecutar Nginx Proxy Manager sin Docker?
No. NPM se distribuye y se diseña como un contenedor Docker, y no hay una instalación sin Docker compatible. Si no puedes o no quieres ejecutar Docker, usa en su lugar Nginx puro con Certbot, o Caddy como un binario único.
¿Nginx Proxy Manager admite certificados comodín?
Sí, mediante un desafío DNS-01 con un proveedor de DNS compatible configurado. Los certificados estándar de un solo nombre de host usan el desafío HTTP-01 a través del puerto 80; los certificados comodín (*.example.com) requieren DNS-01 porque la autoridad de certificación valida el control escribiendo un registro DNS en lugar de alcanzar un único host.