{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreihxwldaycg63zfhgvuojm23x2pdjzrwgfrq6z2nsflqelzdca4dxy",
"uri": "at://did:plc:qnlvqxxf6yadvrhl226p2aiz/app.bsky.feed.post/3mlswglwewgx2"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreidjcp3dykp4ca2caqeesa7do2l5odj7cqu6spdwcauruzch3b5aye"
},
"mimeType": "image/png",
"size": 334769
},
"description": "Nginx Proxy Manager es un servicio que nos facilita la gestión de nuestros SSL, permite crear Hosts Proxy y centralizar las conexiones de nuestros host y aplicaciones web.",
"path": "/ssl-y-proxy-inverso-con-nginx-proxy-manager/",
"publishedAt": "2026-05-14T13:30:04.000Z",
"site": "https://blog.runesoft.net",
"tags": [
"Install Docker and Portainer CE",
"PiHole",
"IT Tools",
"Why you should use NGINX to serve your web application - Sling Academy",
"Access Control in Nginx Proxy Manager: How to Set Up an Access List - TechBloat"
],
"textContent": "Llegado a cierto punto, si tenemos más de un servidor web o API que queremos exponer, estos terminan colisionando en los puertos. Si bien podemos modificarlos o remapearlos en el caso de contenedores, los puertos por defecto para la mayoría de casos siguen siendo:\n\n * `80` para **HTTP**.\n * `443` para **HTTPS**.\n\n\n\nSi uno se sale de ese estándar, se convierte en algo incómodo, ya que tienes que memorizar los puertos, o lo hace menos confiable a la hora de una navegación normal en el caso de las webs.\n\nPara solventar esto, entra en juego lo que se conoce como _Reverse Proxy_ o _Proxy inverso_.\n\nAdemás, nos vemos en la situación en muchos casos de necesitar un certificado **SSL**. Estos, aunque tienen un precio habitualmente, también se pueden obtener de forma gratuita, pero gestionarlos y mantenerlos renovados siempre es un lío.\n\nPara tener todo esto, haremos uso de _Nginx Proxy Manager_.\n\n# Requisitos\n\nSi deseas seguir esta guía, te recomiendo disponer de lo siguiente:\n\n * Un entorno Docker configurado, con la posibilidad de ejecutar `docker compose`. Si no dispones de uno, puedes seguir esta guía: Install Docker and Portainer CE\n * Un servidor **DNS** para asignar nombres de dominio a los puntos de entrada. Puedes usar uno externo y abrir puertos, o si usarás **NPM** internamente puedes tener PiHole\n\n\n\nIdealmente también contar con:\n\n * Un par de servidores WEB que desees darles visibilidad.\n * **Para certificados SSL** : Un dominio en posesión, con una entrada **DNS** apuntando a tu servidor.\n\n\n\n# ¿Qué es un proxy inverso?\n\nUn _Reverse Proxy_ o _Proxy Inverso_ es un servicio que se sitúa entre un cliente y un servidor, recibiendo las solicitudes de los clientes y encargándose de distribuirlas al servidor correspondiente. Esta redirección para el cliente es totalmente transparente.\n\nLas principales ventajas y funcionalidades de un _Proxy Inverso_ son las siguientes:\n\n * Centralización y balanceo de carga del tráfico entrante.\n * Simplificación y abstracción de los servicios expuestos.\n * Gestión de SSL/TLS en un único punto.\n * Posibilidad de filtrado de solicitudes maliciosas antes de llegar al servidor de destino real.\n * Capacidad de implementar una capa previa de autenticación y control de acceso.\n\n\n\n# Nginx Proxy Manager\n\n _Nginx_ es un servidor web clásico, que nos permite hostear nuestras páginas web estáticas. Pero tiene una funcionalidad adicional: también puede hacer de proxy inverso.\n\nPodríamos realizar la configuración para ello de forma manual, instalando los diferentes módulos, pero se trata de una funcionalidad tan extendida que ya se empaqueta incluso en contenedores para su uso.\n\nEste paquete, conocido como **NPM** o _Nginx Proxy Manager_ incluye hasta una interfaz gráfica desde la que podremos gestionar todo lo necesario: Desde configuraciones de redirección, hasta certificados **SSL** y sus renovaciones automáticas.\n\n# Instalación\n\nPara realizar la instalación, haremos uso de la imagen _Docker_ oficial. Como se ha mencionado hay otros métodos, pero hoy día este es el recomendable, sobre todo por su comodidad.\n\nPor simplicidad, os dejo el `docker-compose.yml`, y a partir de este os dejaré las adaptaciones que deberíais hacer para vuestro entorno.\n\n## Docker Compose\n\nFichero `docker-compose.yml` base para **NPM** :\n\n\n services:\n npm:\n image: 'jc21/nginx-proxy-manager:latest'\n restart: unless-stopped\n container_name: nginx\n ports:\n - '80:80' # Public HTTP Port\n - '443:443' # Public HTTPS Port\n - '81:81' # Admin Web Port\n volumes:\n - type: bind\n source: /home/user/nginx/data\n target: /data\n bind:\n create_host_path: true\n - type: bind\n source: /home/user/nginx/ssl\n target: /etc/letsencrypt\n bind:\n create_host_path: true\n\n\nCon este fichero, estamos indicando que **NPM** va a usar los siguientes puertos:\n\n * `80` para solicitudes **HTTP**.\n * `443` para solicitudes **HTTPS**.\n * `81` para la interfaz de gestión de **NPM**.\n\n\n\nDe estos, no recomiendo modificarlos por simplicidad y evitar problemas de funcionamiento del proxy.\n\n⚠️\n\nRecuerda modificar las rutas definidas de los volúmenes __bind__ en su propiedad `device` para que apunte a las rutas que desees. Estas se crearán automáticamente gracias a la propiedad `create_host_path: true`.\n\nUna vez tengamos las modificaciones aplicadas, ejecutamos el siguiente comando:\n\n\n sudo docker compose up -d\n\n\nEsperamos un rato, y comprobamos si nuestro contenedor se ha lanzado correctamente:\n\n\n sudo docker ps\n\n\nSi tenemos más contenedores, saldrán listados, pero entre ellos deberíamos encontrar el de **NPM**.\n\n# Configuración\n\nTras lanzar el `docker-compose.yml`, podremos acceder a la interfaz web de gestión de _Nginx Proxy Manager_. Para ello, accederemos a la IP de nuestro servidor, seguido del puerto `81`: `http://ip.servidor.nginx.proxy:81`\n\nY lo primero que nos aparecerá será el formulario para crear el usuario de administración:\n\nAquí tan solo tendremos que rellenarlo como prefiramos, creando nuestro primer usuario administrador de NPM al clicar en _Save_.\n\nCon esto, podremos ver nuestro tablero principal:\n\nDesde aquí es donde podremos gestionar todo lo que necesitemos.\n\n## Crear un host Proxy\n\nEsta es la función principal de un _Proxy Inverso_ , redirigir de un punto a otro el tráfico, enmascarando el servicio de destino.\n\nEso lo gestionaremos desde la sección de _Proxy Host_ , donde actualmente no tenemos ninguno.\n\nPara crear uno nuevo, le daremos a _Add Proxy Host_ , y nos aparecerá el siguiente formulario:\n\nLos campos que necesitaremos rellenar son los siguientes:\n\nCampo | Descripción\n---|---\n**Domain Names** | Listado de nombres de dominio o IPs a los que este _Proxy Host_ deberá atender y redirigir. Son el punto de entrada.\n**Scheme** | Elegir entre `HTTP` y `HTTPS` en función del protocolo de comunicación entre **NPM** y el servidor de destino.\n**Forward Hostname/IP** | Dirección IP o Dominio del servidor de destino. Este debe ser único.\n**Forward Port** | Puerto del servidor de destino al que redirigir.\n**Websockets Support** | Si el servidor que quieres visibilizar mediante el proxy hace uso de Websockets, deberás habilitarlo.\n\nEn mi caso, haré este de ejemplo, para redirigir el tráfico entrante a mi servicio de IT Tools, y le daré _Save_ :\n\nY ahora en el listado nos sale nuestro _Proxy Host_ , con los datos que le hemos introducido:\n\n⚠️\n\nEn este punto, es necesario que dispongas de un servidor DNS con un dominio apuntando a ****NPM**** con el nombre que desees.\n\nEste DNS puede ser externo mediante proveedores si deseas publicar estos servidores; o interno con servicios como PiHole\n\nSi no tenemos dado de alta el dominio que hemos introducido, es el momento de hacerlo, y una vez lo tengamos, accederemos a él en una nueva pestaña de nuestro navegador. Al ser mi ejemplo con IT Tools, me sale la siguiente página, verificando por tanto que el _Proxy Host_ ha hecho su trabajo:\n\n## Control de acceso\n\nOtra de las grandes ventajas de usar **NPM** como _Reverse Proxy_ es la capacidad de implementar un control de acceso.\n\nPor ejemplo, en mi caso anterior donde he configurado el _Proxy Host_ de IT Tools, podríamos exigir que se inicie sesión con un usuario y contraseña para verificar si se tiene o no acceso al servicio, antes siquiera de cargar la solicitud.\n\nToda esta configuración la haríamos desde la sección _Acces Lists_.\n\nLe damos a _Add Access Lists_ para que se nos abra el formulario de creación, donde le podremos introducir el nombre de la lista, además de, para este ejemplo, activar _Satisfy Any_ , esto lo que hará es que deberemos cumplir cualquiera de las condiciones de control, con una será suficiente, en nuestro caso, usuario y contraseña:\n\nAhora iremos a la pestaña de _Authorizations_ :\n\nEs aquí donde se nos permitirá crear uno o varios usuarios para esta lista de acceso.\n\nLe damos a _Save_ y se nos creará la lista de acceso, apareciendo ahora en el listado:\n\nSi regresamos a nuestros _Proxy Hosts_ desde el desplegable del menú de _Hosts_ , y editamos el que hemos creado anteriormente, podremos seleccionar la lista de control de acceso:\n\nElegimos nuestra nueva lista, y si ahora refrescamos la página que teníamos de nuestro servidor, veremos que aparece lo siguiente:\n\nSe trata de la autenticación básica. Será aquí donde introduciremos los datos de uno de los usuarios creados anteriormente, y al hacerlo veremos que carga adecuadamente:\n\nCon esto ya podemos limitar el acceso a ciertos servicios mediante usuario y contraseña.\n\nℹ️\n\nLas __Access Lists__ también permiten filtrado por direcciones IP de origen y otras funcionalidades.\n\n## Certificados SSL y uso de HTTPS\n\nComo mencionaba al inicio del post, otra de las funcionalidades relevantes de _Nginx Proxy Manager_ es la facilidad que nos da para solicitar, renovar y gestionar certificados SSL.\n\nPara este punto, sí que es necesario tener un dominio contratado, sea con el proveedor que sea, y configurar el DNS del proveedor para que apunte a nuestra IP (usando DDNS o Cloudflare tunnels). En resumen, nuestro servidor de **NPM** debe ser visible desde el exterior al menos el puerto `443`.\n\nUna vez tengamos tengamos lo anterior listo, vamos a la sección de _Certificates_.\n\nLe daremos a _Add Certificate_ y nos aparecerá un formulario. Aquí agregaremos los dominios que deseemos. En mi caso, voy a utilizar los que tengo publicados y configurados en mi proveedor DNS:\n\nLe damos a _Save_ , y ahora nos aparecerá en la lista de certificados disponibles, con su estado. Aquí nos indicará la fecha de caducidad, si se está usando, y la opción de renovarlo.\n\nAhora podríamos regresar a nuestro _Proxy Host_ y editarlo nuevamente, modificando el _Scheme_ a HTTPS y luego yendo a la pestaña de _SSL_ :\n\nSeleccionamos ahora el certificado creado y le damos a guardar.\n\nAhora podremos acceder a nuestra web mediante `HTTPS` sin problemas y con un certificado válido.\n\n# Conclusión\n\n _Nginx Proxy Manager_ como _Reverse Proxy_ o _Proxy Inverso_ nos facilita enormemente la gestión de acceso a nuestros servicios web, junto con sus certificados y controles.\n\nAhora ya sabemos instalarlo y configurarlo adecuadamente para nuestras necesidades, pudiendo tener nuestros servicios publicados, con SSL/TLS y securizados con listas de acceso si fuera necesario.\n\n# Referencias\n\nLista de referencias empleadas para realizar este post:\n\n * Documentación oficial: Why you should use NGINX to serve your web application - Sling Academy\n * Control de acceso: Access Control in Nginx Proxy Manager: How to Set Up an Access List - TechBloat\n\n\n\n# Vídeo\n\n0:00\n\n/2:17\n\n1×",
"title": "SSL y Proxy Inverso con Nginx Proxy Manager",
"updatedAt": "2026-05-14T13:30:04.416Z"
}