Рейтинг:0

HAProxy Timeouts и Streaming Backend — зависает навсегда

флаг ru
Sam

У меня есть серверная часть haproxy, которая передает файл клиенту с помощью сценария CGI. Я пытаюсь установить тайм-аут для своих внутренних серверов. Все работает нормально, кроме этого таймаута.

Когда я устанавливаю параметр "timeout server" в конфиге haproxy на 1 секунду (просто для проверки - бэкэнд занимает 2-3 секунды как минимум), и делаю запрос, через 1 секунду он ставит запись в лог-файл для серверный запрос (до того, как запрос будет завершен), и оттуда он зависает навсегда. Клиент никогда не получает ответа, ни ошибки, ничего.

Я просмотрел всю документацию по конфигурации haproxy и не могу найти ни одной опции тайм-аута, которая имела бы здесь смысл. Но это кажется очень странным поведением по умолчанию, чтобы зависнуть навсегда, если тайм-аут достигнут без полного ответа (с тех пор я понял, что настройка должна быть тайм-аутом только для заголовков, но я не могу найти другую настройку тайм-аута для бэкенда).

Haproxy просто не поддерживает какой-либо потоковый HTTP-ответ? Я понимаю, что мы не можем отправить заголовок, но могу ли я настроить его так, чтобы он просто отправлял любые данные, которые у него есть, чтобы клиент понял, что он искажен?

Вот строка журнала для одного из этих запросов, время ожидания которого истекло:

28 апр 09:32:51 print haproxy[29896]: 127.0.0.1:37662 [28/апр/2022:09:32:47.317] http_front http_back/ИМЯ_СЕРВЕРА 2/3007/23/46/4080 200 150 - - sD- - 1/1/0/0/+3 0/0 "POST/HTTP/1.1"

Полный конфиг haproxy:

Глобальный
    журнал /dev/лог локальный0
    журнал /dev/log local1 уведомление
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 уровень администратора expose-fd listeners
    статистика тайм-аут 30s
    пользовательский прокси
    группа haproxy
    демон

    # Расположение материалов SSL по умолчанию
    ca-база /etc/ssl/сертификаты
    crt-база /etc/ssl/частный

    # См. https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
    ssl-default-bind-ciphers -CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
    ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256: TLS_AES_256_GCM_SHA384: TLS_CHACHA20_POLY1305_SHA256
    ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

значения по умолчанию
    журнал глобальный
    режим http
    опция httplog
    опция
    опция повторной отправки
    повторяет 3
    timeout queue 15m # Как долго клиент должен ждать, пока сервер станет доступным.
    #максконн 10000
    таймаут клиента 15м
    тайм-аут соединения 1с
    тайм-аут сервера 10 секунд
    лимит сеансов 10000
    файл ошибок 400 /etc/haproxy/errors/400.http
    файл ошибок 403 /etc/haproxy/errors/403.http
    файл ошибок 408 /etc/haproxy/errors/408.http
    файл ошибок 500 /etc/haproxy/errors/500.http
    файл ошибок 502 /etc/haproxy/errors/502.http
    файл ошибок 503 /etc/haproxy/errors/503.http
    файл ошибок 504 /etc/haproxy/errors/504.http

интерфейс http_front
    привязать *:88
    статистика uri /haproxy?stats
    default_backend http_back
    #максконн 10000

серверная часть http_back
    баланс
    повторная попытка все-повторяемые-ошибки
    сервер по умолчанию maxconn 1 соблюдать предел ошибок уровня 7 1 уценка при ошибке
    ИМЯ сервера IP:ПОРТ

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.