HAProxy redefinindo as conexões de backend

1

Estou no processo de configurar uma série de servidores como proxies para nosso servidor de aplicativos, principalmente para obscurecer o IP do servidor de aplicativos como parte de um conjunto de medidas anti-DDOS.

Meu objetivo é fazer com que o HAProxy aceite conexões HTTP / 1.0 de curta duração e encaminhá-las para o backend através de conexões persistentes, de modo a reduzir significativamente a sobrecarga perdida no processo de conexão, início lento, etc.

Eu tenho essa configuração funcionando parcialmente, mas ainda vejo uma taxa de conexão muito maior para o back-end do que o esperado - na investigação, parece que cada conexão backend está atendendo entre 1 e 5 solicitações, sendo redefinida pelo lado HAProxy.

Esses pacotes de redefinição sempre acontecem depois que uma resposta é totalmente recebida do servidor, antes que qualquer outra solicitação seja enviada, e eles acontecem depois de um atraso aparentemente aleatório - às vezes tão curto quanto 0,1s, às vezes até 20s. Alterar as configurações de tempo limite do HAProxy parece não ter efeito.

Alguém sabe o que faria com que o HAProxy exibisse esse comportamento, ou como eu poderia depurá-lo melhor?

Editar: Esqueci de mencionar que não era possível obter os back-ends para gerar registros significativos, mesmo usando o tcplog

Configuração (redigida):

global
    log /dev/log    local0
    log /dev/log    local1 notice
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    maxconn 16384
    chroot /var/lib/haproxy
    user haproxy
    group haproxy
    daemon

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    option  http-keep-alive
    timeout connect         5s
    timeout client          50s
    timeout server          50s
    timeout http-keep-alive 50s
    timeout http-request    30s
    maxconn 4000
    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
    # Temporary setting, egress is fragile w/ high rate of connections
    default-server maxconn 200

frontend fe-web
    bind 0.0.0.0:80
    acl cloudflare src -f /etc/haproxy/cloudflare_ips

    block if !cloudflare

    use_backend be-web

frontend fe-legacy
    bind 0.0.0.0:29080
    option forwardfor header CF-Connecting-IP

    use_backend be-legacy

backend be-web
    server srv-web 46.105.16.9:34020 check
    option httpchk HEAD / HTTP/1.1\r\nHost:\ legacy-domain

backend be-legacy
    server srv-legacy 46.105.16.9:34020 check
    option httpchk HEAD / HTTP/1.1\r\nHost:\ legacy-domain
    
por Lachlan Pease 27.01.2015 / 06:31

0 respostas