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
Tags networking proxy linux tcp keepalive