En HAProxy, la opción send-proxy
en la configuración de un backend se utiliza para que HAProxy envíe información adicional sobre la conexión del cliente original al servidor de backend mediante el protocolo PROXY. Este protocolo transmite detalles importantes como la dirección IP y el puerto del cliente original, así como la dirección IP y el puerto del servidor destino en una conexión TCP.
¿Cuándo es útil?
- Preservar información del cliente original: Si HAProxy actúa como proxy entre el cliente y el servidor backend, el backend normalmente verá las conexiones como si vinieran desde HAProxy en lugar del cliente real. Con
send-proxy
, el servidor backend puede obtener información del cliente original. - Análisis o registro preciso: Algunos servidores backend, como NGINX o aplicaciones personalizadas, pueden interpretar el protocolo PROXY y registrar la dirección IP original del cliente.
- Compatibilidad con servidores configurados para PROXY: Si el servidor de backend está configurado para aceptar conexiones PROXY, esta opción permite cumplir con ese requisito.
Ejemplo de configuración
backend my_backend
server server1 192.168.1.10:80 send-proxy
En este ejemplo, HAProxy envía un encabezado PROXY al servidor 192.168.1.10
en cada conexión.
Formato del protocolo PROXY
El protocolo PROXY tiene dos versiones principales:
- Versión 1 (texto plano): Envía la información en una línea de texto simple, fácil de leer.
PROXY TCP4 192.168.0.1 192.168.1.10 12345 80
- Versión 2 (binaria): Más eficiente y compacta, adecuada para escenarios de alto rendimiento.
Configuración relacionada
send-proxy-v2
: Utiliza la versión 2 del protocolo PROXY.accept-proxy
: Se configura en un frontend o servidor para indicar que se espera recibir el protocolo PROXY.
Consideraciones
- Compatibilidad del backend: Asegúrate de que el servidor de backend soporte el protocolo PROXY; de lo contrario, no podrá procesar las conexiones correctamente.
- Seguridad: Solo utiliza
send-proxy
hacia servidores backend confiables, ya que el encabezado PROXY puede ser manipulado si la conexión no está protegida.