Solución al Error HTTP 400 en Configuraciones con HAProxy y NGINX

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

Descripción del Problema

El error HTTP 400 aparece frecuentemente en configuraciones donde HAProxy actúa como un proxy inverso delante de un servidor NGINX. En los logs de NGINX, el error se refleja de la siguiente manera:

10.0.0.1 - - [24/Jan/2025:13:46:44 +0100] "PROXY TCP4 192.168.0.1 10.0.0.1 51910 443" 400 157 "-" "-"
10.0.0.1 - - [24/Jan/2025:13:46:53 +0100] "PROXY TCP4 192.168.0.1 10.0.0.1 51916 443" 400 157 "-" "-"
10.0.0.1 - - [24/Jan/2025:13:46:53 +0100] "PROXY TCP4 192.168.0.1 10.0.0.1 41463 443" 400 157 "-" "-"
10.0.0.1 - - [24/Jan/2025:13:47:00 +0100] "PROXY TCP4 192.168.0.1 10.0.0.1 51926 443" 400 157 "-" "-"

La causa principal de este error es que NGINX no está configurado para interpretar el protocolo PROXY utilizado por HAProxy.

Solución

Para solucionar este problema, es necesario habilitar el soporte del protocolo PROXY en las directivas listen de NGINX.

Pasos para Corregir la Configuración

  1. Editar la Configuración de NGINX: Abra el archivo de configuración del servidor virtual en NGINX. Por ejemplo:

    sudo nano /etc/nginx/sites-available/default
  2. Modificar las Directivas listen: Añada la opción proxy_protocol a cada directiva listen que esté recibiendo tráfico desde HAProxy. Por ejemplo:

    server {
    listen 80 proxy_protocol;
    listen 443 ssl http2 proxy_protocol;

    server_name ejemplo.com;

    ssl_certificate /etc/ssl/certs/ejemplo.crt;
    ssl_certificate_key /etc/ssl/private/ejemplo.key;

    location / {
    proxy_pass http://backend;
    }
    }

  3. Reiniciar NGINX: Guarde los cambios y reinicie el servicio NGINX para aplicar la nueva configuración:

    sudo systemctl restart nginx

Consideraciones Adicionales

  • Validar la Configuración de HAProxy: Asegúrese de que HAProxy esté configurado para utilizar el protocolo PROXY en las directivas server o backend. Por ejemplo:

    backend app_backend
    server app1 10.0.0.1:80 send-proxy
  • Diagnóstico de Errores: Si el error persiste, revise los logs de NGINX y HAProxy para identificar posibles problemas adicionales.

Con esta configuración, NGINX estará correctamente configurado para interpretar el protocolo PROXY y evitará el error HTTP 400.