Exponiendo aplicaciones de Docker con Nginx

21 feb 2024

Escrito por: Cristina Rancaño

En este post queremos compartir algunos ejemplos básicos de cómo utilizar Nginx para exponer aplicaciones que están corriendo en Docker.

Para empezar, damos un repaso rápido a los servicios que vamos a ver:

  • Nginx: es un servidor web de código abierto que también es usado como proxy inverso, cache de HTTP, y balanceador de carga.

  • Docker: es una herramienta de código abierto que permite a los desarrolladores crear, desplegar, ejecutar y gestionar contenedores.

Requisitos necesarios

  • Un servidor Linux (En el ejemplo utilizaremos uno basado en Debian)

  • Tener Nginx instalado: apt update && apt install nginx

  • Tener Docker instalado: docu.

Nginx con Docker

Esta es la infraestructura que montaremos:

  • 2 aplicaciones que corren en docker:

    • App1 - que expone el puerto 1234

    • App2 - que expone el puerto 1235

  • Un servidor Nginx donde tendremos los siguientes dominios:

    • app1.test.com

    • app2.test.com

Para poder comprender esto, primero hay que ver lo siguiente:

  • Gracias a los Vhosts de Nginx estamos redirigiendo el tráfico y las solicitudes hacia nuestros contenedores.

  • Cada Vhost tiene su propia configuración, generalmente la encontramos en:

    /etc/nginx/sites-available → son los vhosts disponibles en nuestro servidor.

    /etc/nginx/sites-enabled → son los vhosts activos, suelen ser enlaces simbólicos al directorio anterior.

En este ejemplo vamos a ver una configuración básica para cada uno de los Vhosts. Por ejemplo vamos a configurar el listener, el hostname y el proxy correspondiente. Ejemplo:

Vhost para App1

server {
    listen 80;
    server_name app1.test.com;

    location / {
        proxy_pass http://localhost:1234;
        # Otras configuraciones
    }
}


Vhost para App2

server {
    listen 80;
    server_name app2.test.com;

    location / {
        proxy_pass http://localhost:1235;
        # Otras configuraciones
    }
}

Posibles errores

  • Conflicto entre puertos: Hay que tener en cuenta, que cada contenedor debe tener un puerto diferente del host.

  • Los puertos de las aplicaciones deben ser diferentes al del servidor web Nginx.

Nginx con Docker y servicios del sistema

Aparte de configurar Vhosts que deriven en contenedores, también podemos derivar tráfico a servicios que corran sobre el propio sistema.

Vhost para App3

server {
    listen 80;
    server_name app3.test.com;

    location / {
        proxy_pass http://localhost:8080;
        # Otras configuraciones
    }
}

Resumen

En este post tenemos diferentes ejemplos básicos de cómo con Nginx podemos derivar tráfico a contenedores y también a servicios que corren dentro de nuestro servidor. Esperamos que os haya sido útil.

¡Muchas gracias por leer!

¿Empezamos?

Consigue ya el equipo de DevOps que necesitas.

¿Empezamos?

Consigue ya el equipo de DevOps que necesitas.

¿Empezamos?

Consigue ya el equipo de DevOps que necesitas.