Tutorial

Desplegar sus aplicaciones con Nginx Proxy Manager en un VPS

Despliegue9 min de lectura10 pasos

Nginx Proxy Manager (NPM) coloca una interfaz web clara por encima de Nginx para gestionar reverse proxies, dominios y certificados SSL sin editar un solo archivo de configuración. En cuanto aloja más de una aplicación en un VPS —una API, un Gitea, un Portainer, un n8n— necesita una capa de enrutamiento HTTP fiable. Esta guía le lleva desde la instalación con Docker hasta los ajustes avanzados: redes aisladas, listas de acceso, wildcard SSL y resolución de los errores más frecuentes.

Contenido· Por qué un reverse proxy en su VPS1/10
  1. 01Por qué un reverse proxy en su VPS
  2. 02NPM frente a la configuración manual de Nginx: 7 ventajas concretas
  3. 03Requisitos previos con cifras antes de instalar NPM
  4. 04Instalación y primera configuración de Nginx Proxy Manager
  5. 05Configuración avanzada
  6. 06Endurecimiento: rate limiting en la pestaña Avanzado
  7. 07Resolución de los errores más frecuentes
  8. 08Errores frecuentes y sus causas
  9. 09Nginx Proxy Manager frente a Traefik
  10. 10Cuándo plantearse Traefik o Caddy

Por qué un reverse proxy en su VPS

Un VPS expone una sola dirección IP pública. Detrás de esa IP puede ejecutar cinco, diez o veinte servicios en puertos internos distintos. Sin reverse proxy, exponer cada servicio en un puerto público implica abrir esos puertos en el firewall, gestionar manualmente los certificados TLS de cada uno e informar de ello a cada usuario. Un reverse proxy resuelve estos tres problemas de una sola vez: recibe todo el tráfico en los puertos 80 y 443, identifica el dominio solicitado y redirige la petición al contenedor interno correcto. Nginx Proxy Manager añade una capa de interfaz gráfica a esta mecánica: ningún archivo de configuración que escribir, ningún reload manual, y los certificados Let's Encrypt se gestionan con unos pocos clics. Resulta especialmente adecuado para las agencias que alojan varias aplicaciones de clientes en el mismo servidor, o para los desarrolladores independientes que ejecutan varios proyectos en paralelo.

NPM frente a la configuración manual de Nginx: 7 ventajas concretas

  • Ningún archivo de configuración: cada proxy host se crea desde la interfaz web, sin sintaxis Nginx que memorizar.
  • Certificados Let's Encrypt automáticos: NPM solicita, instala y renueva los certificados sin intervención. Wildcard posible mediante DNS challenge.
  • Gestión centralizada: todos sus dominios, subdominios y redirecciones en una sola pantalla, en lugar de una decena de archivos en /etc/nginx/sites-enabled/.
  • Listas de acceso (Access Lists) integradas: proteger un servicio por IP o por contraseña sin tocar la configuración de cada aplicación.
  • Logs por host consultables en la interfaz: identificar un error 502 o un abuso sin entrar por ssh en el contenedor.
  • Redirecciones HTTP→HTTPS y páginas 404 personalizadas configurables de forma visual.
  • Descubrimiento por nombre de contenedor Docker: apuntar a portainer:9000 en lugar de a una IP interna inestable que cambia al reiniciar.

Requisitos previos con cifras antes de instalar NPM

NPM solo enruta tráfico, por lo que es ligero. Un VPS con 1 GB de RAM y 1 vCPU basta si NPM es el único servicio destacable. Si además aloja detrás de él las aplicaciones, dimensione según la suma de sus necesidades. Prevea 15 GB de disco SSD (certificados, base SQLite, logs). Software necesario: Docker 24+ y el plugin Compose v2 (docker compose, no el antiguo comando docker-compose). Red: los puertos 80 y 443 deben estar libres en el VPS, ya que NPM es su único ocupante. El puerto 81 queda reservado a la interfaz de administración; nunca debe exponerse directamente a Internet. DNS: apunte sus registros A a la IP del VPS antes de solicitar los certificados. Para un wildcard *.votre-domaine.com, hace falta una clave API de su proveedor DNS (Cloudflare, OVH, etc.).

Instalación y primera configuración de Nginx Proxy Manager

  1. Instalar Docker en el VPS

    En un servidor Debian/Ubuntu: curl -fsSL https://get.docker.com | sh. Compruebe después: docker --version y docker compose version. Si el plugin Compose no está presente, instale el paquete docker-compose-plugin con apt.

  2. Crear la carpeta de trabajo y el archivo Compose

    Cree /opt/npm en el VPS. Dentro de esa carpeta, cree un archivo docker-compose.yml. Declare en él el servicio NPM con la imagen jc21/nginx-proxy-manager:latest, mapee los puertos 80:80, 443:443 y 81:81, y defina dos volúmenes: ./data:/data y ./letsencrypt:/etc/letsencrypt.

  3. Arrancar el contenedor

    Desde /opt/npm, ejecute docker compose up -d. Compruebe que el contenedor está en marcha: docker compose ps. La interfaz de administración queda accesible en http://IP_DU_VPS:81 en los treinta segundos siguientes.

  4. Primera conexión y protección de la cuenta admin

    Conéctese con las credenciales por defecto: correo [email protected], contraseña changeme. NPM le invita de inmediato a cambiar estos dos valores. Hágalo antes de cualquier otra acción: esta cuenta da acceso total a su infraestructura de enrutamiento.

  5. Crear una red Docker compartida

    Para que NPM pueda alcanzar sus contenedores de aplicación por su nombre, deben compartir la misma red Docker. Cree una red externa: docker network create proxy. En el docker-compose.yml de NPM, declare esa red como externa. Haga lo mismo en el Compose de cada aplicación que quiera proxificar.

  6. Añadir un primer Proxy Host

    En la interfaz: Proxy Hosts → Add Proxy Host. Indique el dominio (p. ej. app.votre-domaine.com), el Forward Hostname (nombre del contenedor o IP interna) y el puerto de la aplicación. Marque «Block Common Exploits». Si la aplicación usa WebSockets, active «Websockets Support».

  7. Activar el SSL de Let's Encrypt

    En la pestaña SSL del Proxy Host, elija «Request a new SSL Certificate», acepte las condiciones de Let's Encrypt y marque «Force SSL». NPM contacta con los servidores ACME, valida el dominio mediante HTTP-01 e instala el certificado. Su servicio queda en HTTPS en unos segundos. La renovación es automática.

  8. Proteger la interfaz de administración (puerto 81)

    Cierre el puerto 81 en su firewall (ufw deny 81). Cree después un Proxy Host dedicado —por ejemplo npm.votre-domaine.comlocalhost:81— con SSL y una Access List restringida a su IP de gestión. Así accede a la interfaz por HTTPS sin exponer el puerto 81 al resto del mundo.

  9. Certificado wildcard mediante DNS challenge

    Para cubrir todos sus subdominios con un solo certificado, use el DNS challenge. En la pestaña SSL, seleccione «Use a DNS Challenge», elija su proveedor (Cloudflare, OVH…) e indique la clave API. NPM crea un registro TXT en su zona DNS, valida la propiedad del dominio y obtiene el certificado *.votre-domaine.com.

  10. Probar la cadena completa

    Desde un terminal: curl -I https://app.votre-domaine.com. Espere un código 200 o el código de su aplicación. Compruebe también la redirección HTTP: curl -I http://app.votre-domaine.com debe devolver un 301 hacia la versión HTTPS.

Configuración avanzada

NPM expone en su interfaz varias funcionalidades que van más allá del simple reverse proxy. Las Access Lists permiten restringir el acceso a un host por rango de IP, por credenciales HTTP Basic Auth, o por una combinación de ambos, algo útil para proteger un backoffice sin añadir autenticación en la propia aplicación. Los Streams gestionan el proxy TCP/UDP para los protocolos que no son HTTP (MySQL remoto, servidor de juegos, MQTT…). La sección Redirecciones crea reglas permanentes (301) o temporales (302) de un dominio o de una ruta hacia otra URL, sin que haga falta un servicio detrás. Las pestañas Avanzado de cada proxy host permiten inyectar configuración Nginx en bruto cuando la interfaz no cubre un caso particular (cabeceras de seguridad personalizadas, proxy_read_timeout ampliado para las peticiones largas de subida, etc.).

Endurecimiento: rate limiting en la pestaña Avanzado

NPM no expone ningún control de rate limiting en su interfaz básica, pero puede inyectar la directiva Nginx en la pestaña «Advanced» del proxy host correspondiente. Declare una zona compartida en la configuración personalizada: limit_req_zone $binary_remote_addr zone=api:10m rate=30r/m; y luego aplíquela: limit_req zone=api burst=10 nodelay;. Esto limita cada IP a 30 peticiones por minuto con un burst de 10, lo que basta para recortar el scraping o los intentos de fuerza bruta en un formulario de inicio de sesión sin bloquear a los usuarios legítimos.

Resolución de los errores más frecuentes

Estos son los cinco problemas más frecuentes que aparecen tras una instalación de NPM, con su diagnóstico directo.

Errores frecuentes y sus causas

  • 502 Bad Gateway: NPM no alcanza su contenedor. Compruebe primero que el contenedor de la aplicación está en marcha (docker ps) y que está en la misma red Docker que NPM (docker network inspect proxy). Compruebe después que el Forward Hostname corresponde exactamente al nombre del servicio declarado en el Compose de la aplicación.
  • Certificado SSL pendiente o error ACME: Let's Encrypt debe poder alcanzar su servidor en el puerto 80 a través del dominio declarado. Compruebe que el registro DNS A apunta a la IP correcta, que el puerto 80 no está bloqueado por el firewall del VPS ni por un filtro de red aguas arriba, y que el dominio se resuelve desde el exterior (dig app.votre-domaine.com).
  • Contenedor inaccesible mediante el nombre DNS de Docker: si apunta a monapp:3000 y obtiene un error de resolución, el contenedor monapp no está en la misma red que NPM. Añada la red proxy en el Compose de la aplicación y vuelva a crear los contenedores (docker compose up -d --force-recreate).
  • Redirección infinita HTTP→HTTPS: ocurre cuando la propia aplicación efectúa su propia redirección HTTPS además de la de NPM. Añada en la pestaña Avanzado: proxy_set_header X-Forwarded-Proto $scheme; para que la aplicación conozca el protocolo real.
  • Interfaz de administración inaccesible tras un reinicio: asegúrese de que el servicio NPM tiene la directiva restart: unless-stopped en su Compose. Sin ella, Docker no volverá a arrancar el contenedor tras un reboot del VPS.

Nginx Proxy Manager frente a Traefik

Desplace la tabla

CriterioNginx Proxy ManagerTraefik
ConfiguraciónInterfaz web visual, ningún archivo que editarArchivos YAML y labels de Docker
Curva de aprendizajeBaja, accesible sin experiencia en NginxMás pronunciada, orientada a DevOps
SSL Let's EncryptAutomático desde la interfaz, wildcard posibleAutomático mediante configuración
Descubrimiento de serviciosManual (nombre de contenedor o IP:puerto)Automático mediante labels de Docker
Ideal paraUnos pocos servicios gestionados manualmente, setup claroEntornos dinámicos y numerosos contenedores
Consumo de RAMMuy bajoBajo
Logs por hostConsultables en la interfazMediante un stack de logs externo
Gestión de accesosAccess Lists integradas (IP, contraseña)Middlewares que hay que configurar

Cuándo plantearse Traefik o Caddy

NPM encaja perfectamente para un parque de servicios estable cuyo número se mantiene bajo control. En cuanto gestiona despliegues dinámicos —contenedores que aparecen y desaparecen de forma automática, como en un entorno Kubernetes o con pipelines CI/CD que crean previews sobre la marcha—, Traefik resulta más adecuado: su descubrimiento de servicios mediante los labels de Docker evita volver a la interfaz por cada nuevo contenedor. Caddy es una buena alternativa si busca la sencillez de la configuración por archivo con certificados automáticos, sin interfaz web. En todos los casos, NPM puede convivir con Traefik o Caddy en el mismo VPS, gestionando cada uno una parte del tráfico, siempre que no ponga dos proxies en los mismos puertos 80 y 443. Si su infraestructura crece hasta el punto de gestionar varias decenas de servicios con equipos distintos, una malla de servicios (Consul Connect, Linkerd) sustituye con ventaja al apilamiento de proxies.

Centralice sus dominios con Nginx Proxy Manager

Un VPS Cloud ServOrbit listo con Docker le permite instalar Nginx Proxy Manager como punto de entrada HTTPS único y enrutar todos sus servicios con un SSL automático.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva