Назад | Перейти на главную страницу

HAProxy сбрасывает серверные соединения

Я занимаюсь настройкой ряда серверов в качестве прокси для нашего сервера приложений, в первую очередь для того, чтобы скрыть IP-адрес сервера приложений в рамках комплекса мер по борьбе с DDOS.

Моя цель состоит в том, чтобы HAProxy принимал краткосрочные соединения HTTP / 1.0 и перенаправлял их на бэкэнд через постоянные соединения, чтобы значительно сократить накладные расходы, теряемые в процессе соединения, медленный запуск и т. Д.

У меня эта конфигурация частично работает, но я все еще наблюдаю гораздо более высокую скорость подключения к бэкэнду, чем ожидалось - при расследовании выяснилось, что каждое бэкэнд-соединение обслуживает от 1 до 5 запросов, а затем сбрасывается стороной HAProxy.

Эти пакеты сброса всегда происходят после того, как полностью получен ответ от сервера, до отправки любого дальнейшего запроса, и они происходят после, казалось бы, случайной задержки - иногда до 0,1 с, иногда до 20 секунд. Изменение настроек тайм-аута HAProxy, похоже, не действует.

Кто-нибудь знает, что может вызвать такое поведение HAProxy или как мне лучше его отладить?

Редактировать: Забыл упомянуть, что мне не удалось заставить серверные части генерировать какие-либо значимые журналы, даже используя tcplog

Конфигурация (отредактировано):

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