[{"data":1,"prerenderedAt":193},["ShallowReactive",2],{"seo-verification":3,"blog-nginx-proxy-manager-vps-proxy-inverso-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-nginx-proxy-manager-vps-proxy-inverso-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":134,"ctaBody":135,"ctaButton":136,"ctaUrl":137,"relatedPosts":138},384,"nginx-proxy-manager-vps-proxy-inverso",{"fr":12,"en":13,"ar":14,"es":10},"nginx-proxy-manager-vps-reverse-proxy","nginx-proxy-manager-vps-reverse-proxy-setup","nginx-proxy-manager-على-vps-إعداد-reverse-proxy","Nginx Proxy Manager en VPS: proxy inverso con SSL automático","Configura un proxy inverso visual en tu VPS con Nginx Proxy Manager: SSL Let's Encrypt automático, enrutamiento Docker multi-app, sin editar nginx.conf.",9,0,false,"2026-09-26T00:00:00+00:00","2026-09-29T14:40:42+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},3,"Despliegue","deploiement","bg-success\u002F10 text-success",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fnginx-proxy-manager-vps-reverse-proxy-poster.svg","Cuando varias aplicaciones se ejecutan en el mismo VPS, cada una escucha en un puerto diferente y gestionar SSL manualmente se convierte en una tarea tediosa. Nginx Proxy Manager (NPM) resuelve este problema con una interfaz web que automatiza los certificados Let's Encrypt, enruta dominios hacia los contenedores correctos y no requiere editar ningún archivo de configuración nginx. Esta guía cubre la instalación, la configuración de hosts proxy y una comparación con Caddy y Traefik para ayudarte a elegir la herramienta adecuada.",[34,38,48,51,67,82,85,88,92,131],{"type":35,"title":36,"body":37},"h2","Por qué necesitas un proxy inverso en un VPS","Un VPS expone una única dirección IP pública. Si ejecutas tres aplicaciones Docker — una API, un front-end y una herramienta de administración — cada una ocupa un puerto diferente: `3000`, `8080`, `9000`. Sin proxy inverso, tus visitantes deben escribir el puerto en la URL, los certificados SSL deben gestionarse aplicación por aplicación, y exponer todos esos puertos públicamente aumenta la superficie de ataque.\n\nUn **proxy inverso** centraliza la entrada del tráfico: recibe todas las solicitudes en los puertos 80 y 443, inspecciona el nombre de dominio o la ruta, y luego reenvía la solicitud al contenedor correcto en la red interna. Las aplicaciones ya no exponen puertos públicos. SSL finaliza en el nivel del proxy, que redistribuye en HTTP simple sobre la red Docker privada.\n\nEsta arquitectura ofrece tres ventajas concretas: un único punto de gestión de certificados, aislamiento de red de las aplicaciones, y la posibilidad de añadir o eliminar una app sin tocar las demás.",{"type":39,"title":40,"items":41},"ul","Lo que Nginx Proxy Manager simplifica",[42,43,44,45,46,47],"**Interfaz web**: añade, modifica y elimina hosts proxy sin línea de comandos ni recarga manual","**SSL Let's Encrypt con un clic**: NPM solicita, renueva e implementa certificados automáticamente via HTTP-01 o DNS-01","**Wildcard DNS**: un único certificado para `*.midominio.com` si tu proveedor DNS soporta la API Certbot","**Listas de acceso**: autenticación HTTP básica o lista blanca de IPs directamente desde la interfaz","**Redirecciones y URLs personalizadas**: HTTP a HTTPS, redirecciones 301\u002F302, sin modificar nginx.conf","**Recarga sin interrupción**: NPM recarga la configuración nginx en segundo plano, sin tiempo de inactividad",{"type":35,"title":49,"body":50},"Requisitos previos","Para seguir esta guía, necesitas un VPS con **Ubuntu 22.04** o **Debian 12** con al menos 1 GB de RAM (2 GB recomendados si varias apps se ejecutan simultáneamente). Docker Engine y Docker Compose v2 deben estar instalados.\n\nLos **puertos 80 y 443** deben ser accesibles desde el exterior. Verifica que tu firewall (`ufw` o reglas del panel de control) los permita. Si usas un firewall cloud (grupo de seguridad, firewall VPS), abre estos dos puertos para el tráfico entrante.\n\nFinalmente, debes tener al menos un **nombre de dominio o subdominio** apuntando a la IP de tu VPS. NPM puede gestionar múltiples dominios simultáneamente — el requisito mínimo es que exista un registro DNS A para cada dominio que quieras proxificar.",{"type":52,"title":53,"steps":54},"steps","Instalar NPM con Docker Compose",[55,58,61,64],{"title":56,"body":57},"Crear la estructura de directorios","Crea una carpeta dedicada y navega a ella:\n\n```bash\nmkdir -p \u002Fopt\u002Fnpm && cd \u002Fopt\u002Fnpm\n```\n\nEsta carpeta contendrá el archivo Compose y los volúmenes persistentes de NPM (base de datos SQLite, certificados, logs).",{"title":59,"body":60},"Redactar docker-compose.yml","Crea el archivo `\u002Fopt\u002Fnpm\u002Fdocker-compose.yml` con el siguiente contenido:\n\n```yaml\nservices:\n  app:\n    image: jc21\u002Fnginx-proxy-manager:latest\n    restart: unless-stopped\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n      - \"81:81\"\n    volumes:\n      - .\u002Fdata:\u002Fdata\n      - .\u002Fletsencrypt:\u002Fetc\u002Fletsencrypt\n\nnetworks:\n  default:\n    name: proxy-net\n    external: false\n```\n\nEl puerto `81` es la interfaz de administración. La red `proxy-net` se compartirá con tus otros contenedores para que sean accesibles sin exponer puertos públicos.",{"title":62,"body":63},"Iniciar NPM","Lanza el contenedor en segundo plano:\n\n```bash\ndocker compose up -d\n```\n\nEspera de 30 a 60 segundos para que NPM inicialice su base de datos. Verifica que los tres puertos estén escuchando:\n\n```bash\nss -tlnp | grep -E ':(80|81|443)'\n```",{"title":65,"body":66},"Primer inicio de sesión y cambio de contraseña","Abre `http:\u002F\u002FIP_DE_TU_VPS:81` en tu navegador. Las credenciales por defecto son `admin@example.com` \u002F `changeme`.\n\nNPM te obliga a cambiar el correo electrónico y la contraseña en el primer inicio de sesión. Usa una dirección válida: se utilizará para las notificaciones de expiración de certificados Let's Encrypt.\n\n**Atención**: el puerto 81 está expuesto públicamente. Configura inmediatamente una lista de acceso (ver sección \"Listas de acceso\") o filtra este puerto a nivel de firewall para restringirlo a tu IP.",{"type":52,"title":68,"steps":69},"Añadir un primer host proxy",[70,73,76,79],{"title":71,"body":72},"Crear un nuevo host proxy","En la interfaz de NPM, haz clic en **Proxy Hosts** y luego en **Add Proxy Host**. Rellena el campo **Domain Names** con tu dominio, por ejemplo `app.midominio.com`. Asegúrate de que el registro DNS A de este subdominio ya apunte a la IP de tu VPS — Let's Encrypt verificará esta resolución.",{"title":74,"body":75},"Configurar el destino","En los campos **Forward Hostname \u002F IP** y **Forward Port**, introduce el host y el puerto de tu aplicación. Si la aplicación se ejecuta en un contenedor Docker en la misma red `proxy-net`, usa el **nombre del servicio** Docker como hostname (ejemplo: `miapp` y puerto `3000`). Marca **Block Common Exploits** para activar las reglas de filtrado básicas.",{"title":77,"body":78},"Activar Let's Encrypt","Pasa a la pestaña **SSL** en la misma ventana. En el menú desplegable, selecciona **Request a new SSL Certificate**. Marca **Force SSL** para redirigir automáticamente HTTP a HTTPS, y **HTTP\u002F2 Support** para activar HTTP\u002F2. Introduce tu correo electrónico, acepta los términos de Let's Encrypt y haz clic en **Save**.\n\nNPM lanza inmediatamente la solicitud de certificado mediante el desafío HTTP-01. En menos de un minuto, tu dominio es accesible via HTTPS con un certificado válido.",{"title":80,"body":81},"Verificar el resultado","La lista de hosts proxy ahora muestra tu entrada con una insignia **SSL** verde. Prueba desde tu navegador o con curl:\n\n```bash\ncurl -I https:\u002F\u002Fapp.midominio.com\n```\n\nLa respuesta debe contener `HTTP\u002F2 200` y una cabecera `server: nginx`. La renovación del certificado es automática — NPM relanza la solicitud 30 días antes de la expiración.",{"type":35,"title":83,"body":84},"Configurar un subdominio con redirección HTTPS forzada","Forzar HTTPS no es solo una buena práctica: es la base de la seguridad del transporte. Al crear o editar un host proxy, la pestaña **SSL** expone tres opciones complementarias.\n\n**Force SSL**: NPM genera automáticamente un bloque `return 301 https:\u002F\u002F$host$request_uri;` en la configuración nginx del vhost. Cualquier solicitud HTTP es redirigida en el lado del servidor antes incluso de llegar a tu aplicación.\n\n**HSTS** (HTTP Strict Transport Security): al marcar esta opción, NPM añade la cabecera `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload` a las respuestas HTTPS. El navegador recuerda que este dominio debe contactarse siempre via HTTPS. Activa HSTS solo si estás seguro de mantener SSL.\n\n**HTTP\u002F2 Support**: activa el protocolo HTTP\u002F2 del lado del cliente, sin ninguna modificación del lado de la aplicación. El multiplexado reduce la latencia percibida, especialmente en páginas con muchos recursos.",{"type":35,"title":86,"body":87},"Caso avanzado: proxy para una app Docker sin puerto expuesto","Una de las ventajas más infrautilizadas de NPM es la capacidad de proxificar contenedores que no exponen ningún puerto público. La comunicación se realiza únicamente en la red Docker interna.\n\nPara que un contenedor sea accesible por NPM sin exposición pública, ambos servicios deben compartir la misma red Docker. Ejemplo con una app Node.js en `\u002Fopt\u002Fmiapp\u002Fdocker-compose.yml`:\n\n```yaml\nservices:\n  web:\n    image: mi-imagen:latest\n    restart: unless-stopped\n    # Sin sección 'ports' — el contenedor no es accesible desde el host\n    networks:\n      - proxy-net\n\nnetworks:\n  proxy-net:\n    external: true\n```\n\nAl declarar `proxy-net` como red externa y adjuntar el servicio a esta red, el contenedor `web` es accesible desde NPM por su nombre de servicio. En la interfaz de NPM, **Forward Hostname** será simplemente `web` y **Forward Port** el puerto interno de la app.\n\nEsta arquitectura significa que incluso si un atacante compromete un contenedor, no puede llegar a otros servicios directamente desde el exterior — todo pasa por el proxy.",{"type":89,"title":90,"body":91},"tip","Listas de acceso: proteger el backoffice con autenticación","NPM permite restringir el acceso a ciertos hosts proxy mediante **listas de acceso**. Ve a **Access Lists** y luego a **Add Access List**. Dale un nombre a la lista, añade entradas bajo la pestaña **Authorization** (nombre de usuario + contraseña hasheada), y\u002Fo restringe por IP en **Access**.\n\nLuego edita el host proxy que quieres proteger y selecciona esta lista en el campo **Access List**. NPM inyecta automáticamente un bloque `auth_basic` en la configuración nginx del vhost. Esto es especialmente útil para exponer herramientas de administración (Portainer, Grafana, interfaces de API internas) sin desplegar un servidor de autenticación completo.\n\nPara el puerto 81 en sí (la interfaz NPM), la protección pasa por el firewall — restringe el acceso a este puerto a tu IP fija o una VPN.",{"type":93,"title":94,"headers":95,"rows":100},"comparison","Comparativa: Nginx Proxy Manager vs Caddy vs Traefik",[96,97,98,99],"Criterio","Nginx Proxy Manager","Caddy","Traefik",[101,106,111,116,121,126],[102,103,104,105],"Configuración","Interfaz web gráfica, sin archivos que editar","Caddyfile declarativo, sintaxis concisa","YAML\u002FTOML o etiquetas Docker, curva de aprendizaje más pronunciada",[107,108,109,110],"SSL automático","Let's Encrypt HTTP-01 y DNS-01, interfaz gráfica","Integrado de forma nativa, HTTP-01 y DNS-01 sin plugin","ACME integrado, requiere configuración YAML",[112,113,114,115],"Auto-descubrimiento Docker","No, configuración manual por host","No nativo, posible via etiquetas con caddy-docker-proxy","Nativo via etiquetas Docker, detecta servicios al iniciar",[117,118,119,120],"Caso de uso ideal","Desarrollador gestionando menos de 20 apps, prefiere UI sobre config","Stack simple a medio, configuración legible en archivo","Microservicios, Kubernetes, entornos dinámicos",[122,123,124,125],"Personalización avanzada","Limitada — snippets nginx personalizados posibles pero no recomendados","Alta via módulos y directivas Caddyfile","Muy alta, middlewares encadenables, plugins ricos",[127,128,129,130],"Recursos","~50 MB RAM en reposo","~30 MB RAM en reposo","~40 MB RAM en reposo, más según plugins",{"type":35,"title":132,"body":133},"Límites de NPM y cuándo migrar a Traefik","NPM cubre la gran mayoría de casos de uso de desarrolladores que gestionan una decena de aplicaciones en uno o dos VPS. Empieza a mostrar sus límites en varios escenarios.\n\n**Configuración nginx avanzada**: NPM genera sus archivos de configuración y los regenera con cada modificación desde la interfaz. Técnicamente es posible añadir snippets personalizados, pero pueden sobreescribirse durante una actualización. Si necesitas configuraciones nginx finas — limitación de tasa por ruta, caché proxy complejo, lógica de reescritura avanzada — NPM se convierte en una capa de fricción en lugar de una ayuda.\n\n**Entornos dinámicos**: en una arquitectura de microservicios donde los contenedores aparecen y desaparecen frecuentemente, configurar manualmente cada host en NPM se convierte en un cuello de botella. \u003Ca href=\"\u002Fblog\u002Fdeployer-avec-haproxy-vps\">HAProxy\u003C\u002Fa> o Traefik, que detectan automáticamente los servicios via etiquetas Docker, están mejor adaptados a este contexto.\n\n**Kubernetes**: NPM no tiene lugar en un clúster Kubernetes. Traefik tiene un Ingress Controller nativo; `ingress-nginx` es la otra opción común.\n\n**Regla práctica**: si tu configuración cabe en la interfaz de NPM y no requiere scripts de automatización para mantenerse actualizada, NPM es la elección correcta. En cuanto te encuentres escribiendo scripts para interactuar con la API de NPM o gestionando archivos de configuración fuera de la interfaz, es la señal para evaluar \u003Ca href=\"\u002Fblog\u002Fdeployer-avec-caddy\">Caddy\u003C\u002Fa> o Traefik según tu contexto.","Un VPS listo para tus contenedores Docker","ServOrbit.com ofrece VPS cloud desde 99 DH\u002Fmes, con red de alta disponibilidad, snapshots y soporte técnico incluido. Despliega Nginx Proxy Manager en minutos.","Desplegar en VPS","\u002Fvps-cloud",[139,159,177],{"id":140,"slug":141,"slugs":142,"title":146,"excerpt":147,"readTime":148,"views":149,"isPinned":19,"publishedAt":150,"updatedAt":151,"category":152,"categories":153,"featuredImage":29,"bgImage":30,"posterImage":155,"relatedSolution":156},39,"desplegar-con-caddy",{"fr":143,"en":144,"ar":145,"es":141},"deployer-avec-caddy","deploy-your-applications-with-caddy-on-a-vps","انشر-تطبيقاتك-باستخدام-caddy-على-خادم-vps","Caddy como reverse proxy en VPS: guía completa","Instala y configura Caddy como reverse proxy en tu VPS: HTTPS automático con Let's Encrypt, múltiples apps, seguridad y solución de errores comunes.",8,1,"2026-05-12T00:00:00+00:00","2026-09-25T23:43:04+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[154],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-caddy-poster.svg",{"categorySlug":157,"appSlug":158},"despliegue-de-aplicaciones-devops","caddy",{"id":160,"slug":161,"slugs":162,"title":166,"excerpt":167,"readTime":23,"views":18,"isPinned":19,"publishedAt":168,"updatedAt":169,"category":170,"categories":171,"featuredImage":29,"bgImage":30,"posterImage":173,"relatedSolution":174},142,"haproxy-en-un-vps-balanceo-de-carga",{"fr":163,"en":164,"ar":165,"es":161},"deployer-avec-haproxy-vps","haproxy-on-a-vps-load-balancing-and-high-availability","haproxy-على-خادم-vps-موازنة-الأحمال-والتوافر-العالي","HAProxy en VPS: balanceo de carga y alta disponibilidad","Instale HAProxy en un VPS para repartir el tráfico, vigilar los backends y preparar una arquitectura web más resiliente.","2026-02-03T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[172],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-haproxy-vps-poster.svg",{"categorySlug":175,"appSlug":176},"infra","haproxy",{"id":178,"slug":179,"slugs":180,"title":184,"excerpt":185,"readTime":186,"views":18,"isPinned":19,"publishedAt":187,"updatedAt":188,"category":189,"categories":190,"featuredImage":29,"bgImage":30,"posterImage":192,"relatedSolution":29},229,"checklist-docker-compose-en-produccion",{"fr":181,"en":182,"ar":183,"es":179},"docker-compose-production-checklist","docker-compose-in-production-10-point-checklist","docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط","Docker Compose en producción: checklist de 10 puntos","Checklist de Docker Compose en producción: 10 ajustes esenciales, health checks, secretos sin downtime, estrategia de rollback, solución de errores comunes.",12,"2026-08-06T00:00:00+00:00","2026-09-29T14:40:45+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[191],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",1790693327123]