# Cómo configurar HAProxy para manejar tráfico HTTP en el puerto 80 y tráfico TCP (usualmente HTTPS) en el puerto 443

- Link: https://binariocero.com/linux/como-configurar-haproxy-para-manejar-trafico-http-en-el-puerto-80-y-trafico-tcp-usualmente-https-en-el-puerto-443
- Published: 2024-06-04T23:52:02+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

### Paso 1: Instalación de HAProxy

En un sistema basado en Debian/Ubuntu, puedes instalar HAProxy con:

    ```wp-block-preformatted
    sudo apt updatesudo apt install haproxy -y
    ```

En un sistema basado en Red Hat/CentOS, puedes instalar HAProxy con:

    ```wp-block-preformatted
    sudo yum install haproxy -y
    ```

### Paso 2: Configuración básica de HAProxy

El archivo principal de configuración de HAProxy se encuentra en `/etc/haproxy/haproxy.
cfg`. A continuación, se muestra un archivo de configuración que maneja tanto HTTP
como TCP en el puerto 443.

    ```wp-block-preformatted
    global    log /dev/log local0    log /dev/log local1 notice    chroot /var/lib/haproxy    stats socket /run/haproxy/admin.sock mode 660 level admin    stats timeout 30s    user haproxy    group haproxy    daemondefaults    log     global    option  dontlognull    timeout connect 5000    timeout client  50000    timeout server  50000    errorfile 400 /etc/haproxy/errors/400.http    errorfile 403 /etc/haproxy/errors/403.http    errorfile 408 /etc/haproxy/errors/408.http    errorfile 500 /etc/haproxy/errors/500.http    errorfile 502 /etc/haproxy/errors/502.http    errorfile 503 /etc/haproxy/errors/503.http    errorfile 504 /etc/haproxy/errors/504.http# Configuración de balanceo HTTPfrontend http_front    bind *:80    mode http    default_backend http_backbackend http_back    mode http    balance roundrobin    server webserver1 192.168.1.10:80 check    server webserver2 192.168.1.11:80 check# Configuración de balanceo TCP (HTTPS)frontend tcp_front    bind *:443    mode tcp    default_backend tcp_backbackend tcp_back    mode tcp    balance roundrobin    server https_server1 192.168.1.20:443 check    server https_server2 192.168.1.21:443 check# Configuración de estadísticaslisten stats    bind *:8080    mode http    stats enable    stats uri /stats    stats auth admin:password
    ```

### Paso 3: Explicación del archivo de configuración

 1. **global**: Configuración global de HAProxy, incluyendo los registros y opciones
    de usuario/grupo.
 2. **defaults**: Configuración predeterminada para los frontend y backend, incluyendo
    los tiempos de espera y archivos de error personalizados.
 3. **frontend http_front**: Configura un frontend para manejar tráfico HTTP en el 
    puerto 80.
 4. **backend http_back**: Define un backend para balancear la carga HTTP entre dos
    servidores web.
 5. **frontend tcp_front**: Configura un frontend para manejar tráfico TCP en el puerto
    443 (usualmente usado para HTTPS).
 6. **backend tcp_back**: Define un backend para balancear la carga TCP entre dos servidores
    HTTPS.
 7. **listen stats**: Configura una interfaz de estadísticas accesible en el puerto
    8080.

### Paso 4: Habilitar y reiniciar HAProxy

Habilita HAProxy para que inicie en el arranque y reinícialo para aplicar los cambios:

    ```wp-block-preformatted
    sudo systemctl enable haproxysudo systemctl restart haproxy
    ```

### Paso 5: Verificación de la configuración

Verifica que HAProxy esté funcionando correctamente:

    ```wp-block-preformatted
    sudo systemctl status haproxy
    ```

Puedes acceder a la interfaz de estadísticas en `http://<tu_ip>:8080/stats` con 
las credenciales `admin:password`.

### Paso 6: Pruebas

 1. **HTTP**: Asegúrate de que tu navegador o una herramienta como `curl` pueda acceder
    a tu servicio HTTP a través de HAProxy.
    `curl http://<tu_ip>`
 2. **TCP (HTTPS)**: Prueba la conexión a tu servicio HTTPS, por ejemplo, usando `curl`
    con la opción `--insecure` si no tienes un certificado válido:
    `curl -k https://
    <tu_ip>`

### Paso 7: Archivos de configuración de ejemplo

Guarda el archivo de configuración en `/etc/haproxy/haproxy.cfg`:

    ```wp-block-preformatted
    # /etc/haproxy/haproxy.cfgglobal    log /dev/log local0    log /dev/log local1 notice    chroot /var/lib/haproxy    stats socket /run/haproxy/admin.sock mode 660 level admin    stats timeout 30s    user haproxy    group haproxy    daemondefaults    log     global    option  dontlognull    timeout connect 5000    timeout client  50000    timeout server  50000    errorfile 400 /etc/haproxy/errors/400.http    errorfile 403 /etc/haproxy/errors/403.http    errorfile 408 /etc/haproxy/errors/408.http    errorfile 500 /etc/haproxy/errors/500.http    errorfile 502 /etc/haproxy/errors/502.http    errorfile 503 /etc/haproxy/errors/503.http    errorfile 504 /etc/haproxy/errors/504.httpfrontend http_front    bind *:80    mode http    default_backend http_backbackend http_back    mode http    balance roundrobin    server webserver1 192.168.1.10:80 check    server webserver2 192.168.1.11:80 checkfrontend tcp_front    bind *:443    mode tcp    default_backend tcp_backbackend tcp_back    mode tcp    balance roundrobin    server https_server1 192.168.1.20:443 check    server https_server2 192.168.1.21:443 checklisten stats    bind *:8080    mode http    stats enable    stats uri /stats    stats auth admin:password
    ```

Siguiendo estos pasos, habrás configurado un HAProxy para balancear tráfico HTTP
y TCP (HTTPS) de manera efectiva.
