У меня есть серверная часть 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:ПОРТ