Gestión de tráfico y proxies: NGINX, HAProxy y Envoy

¿Qué hace un proxy?

En una arquitectura de red, un proxy actúa como intermediario entre un cliente y uno o más servicios. En lugar de comunicarse directamente con el servidor de destino, el cliente envía la solicitud al proxy, que se encarga de procesarla y dirigirla según la configuración establecida.

Este modelo permite separar el punto de entrada de las aplicaciones de los servicios que reciben las solicitudes.

1. Proxy inverso

Un caso común en servidores web es el reverse proxy o proxy inverso.

En este esquema, el cliente se comunica con el proxy y este reenvía la solicitud al servicio correspondiente.

Cliente
   ->
Proxy inverso
   ->
Servicio

Desde el punto de vista del cliente, el proxy funciona como el punto de entrada. El servicio interno no necesita recibir directamente las solicitudes externas.

2. NGINX

NGINX puede funcionar como servidor web y como proxy inverso.

Una configuración puede recibir solicitudes en un punto de entrada y reenviarlas a otro servicio mediante una directiva como proxy_pass.

El flujo general sería:

Cliente
   ->
NGINX
   ->
Aplicación

También puede utilizarse para distribuir solicitudes entre varios servidores mediante mecanismos de balanceo disponibles en su configuración.

3. HAProxy

HAProxy es un software orientado al balanceo de carga y al proxy de tráfico de red.

Puede recibir conexiones de los clientes y distribuirlas entre varios servidores de destino según las reglas configuradas.

              -> Servidor 1
Cliente -> HAProxy -> Servidor 2
              -> Servidor 3

El objetivo de esta configuración es distribuir las solicitudes entre diferentes destinos en lugar de concentrarlas en un único servidor.

4. Envoy

Envoy es un proxy diseñado para gestionar tráfico entre servicios y puede funcionar como parte de arquitecturas distribuidas.

Puede actuar como intermediario entre clientes y servicios, gestionando las solicitudes de acuerdo con la configuración aplicada.

De forma simplificada:

Cliente
   ->
Envoy
   ->
Servicio A / Servicio B / Servicio C

Su uso es especialmente relevante en arquitecturas donde existen múltiples servicios que necesitan comunicarse entre sí.

5. Balanceo de carga

Cuando existen varios servidores capaces de atender una misma aplicación, un proxy puede distribuir las solicitudes entre ellos.

Por ejemplo:

                 -> Backend 1
Cliente -> Proxy -> Backend 2
                 -> Backend 3

La forma exacta en que se distribuye el tráfico depende de la herramienta y de la configuración utilizada.

6. Terminación TLS

Un proxy también puede encargarse de recibir conexiones HTTPS y gestionar la conexión TLS antes de reenviar la solicitud al servicio interno, cuando la arquitectura está configurada de esa manera.

El flujo puede representarse así:

Cliente
   -> HTTPS
Proxy
   ->
Servicio interno

La decisión de dónde termina TLS depende de la arquitectura y de los requisitos de la aplicación.

7. Por qué se utilizan estas herramientas

NGINX, HAProxy y Envoy permiten colocar un punto de control delante de los servicios que reciben tráfico. Según la herramienta y su configuración, ese punto puede encargarse de funciones como el reenvío de solicitudes, el balanceo de carga y la gestión de conexiones.

La idea principal es separar la entrada del tráfico de los servicios que procesan las solicitudes.

Consideraciones

La gestión de tráfico y proxies consiste en controlar cómo llegan las solicitudes a los servicios y cómo se distribuyen dentro de una arquitectura.

NGINX puede funcionar como servidor web y proxy inverso. HAProxy está orientado al proxy y al balanceo de carga. Envoy puede actuar como proxy dentro de arquitecturas con múltiples servicios.

La herramienta adecuada depende de la arquitectura, del tipo de tráfico y de las funciones que necesite gestionar el sistema.

© Arturo Juárez Monroy