Я пытаюсь понять, как параметры haproxy
timeout http-request <timeout>
timeout http-keep-alive <timeout>
timeout server <timeout>
взаимодействуют друг с другом. Я запускаю веб-сайт Apache на двух серверах приложений, находящихся за балансировщиком нагрузки haproxy. Прямо сейчас у меня не включен keep-alive, но я экспериментирую с его включением, потому что думаю, что это поможет оптимизировать сайт. Моя цель состояла в том, чтобы включить keep-alive для соединения между браузером и haproxy, но отключить keep-alive между haproxy и apache. Я добился этого с
option http-server-close
Сейчас я изучаю настройку тайм-аутов сохранения активности. Я изучал руководство по haproxy для параметра http-запроса тайм-аута, параметра http-keep-alive и параметра сервера тайм-аута. Если я правильно понимаю руководство, тайм-аут http-keep-alive - это время, когда соединение остается открытым между новыми запросами, а тайм-аут http-request - это время дождаться заголовков ответа перед закрытием соединения. Но я не могу понять, что диктует сервер тайм-аута. Я хочу сказать, что сервер тайм-аута - это время дождаться полного ответа, но может ли кто-нибудь подтвердить это? Если я прав, что сервер тайм-аута - это время дождаться полного ответа, то правильно ли, что он не должен иметь никакого отношения к настройкам тайм-аута keep-alive?
Вот моя конфигурация haproxy, над которой я работаю:
global
maxconn 4096
pidfile /var/run/haproxy.pid
daemon
defaults
mode http
retries 3
option redispatch
maxconn 5000
timeout connect 5000
timeout client 300000
timeout server 300000
listen HTTP *:80
mode http
cookie HTTP insert nocache
balance roundrobin
#option httpclose # I just commented this out in favor of http-server-close
option http-server-close
timeout http-keep-alive 500 # from the haproxy manual suggestion of "tens to hundreds of ms"
timeout http-request 5000
option forwardfor
stats enable
stats uri /my-lb-status
stats auth myLbStatus:123456
reqadd X-Forwarded-Proto:\ http
option httpchk GET /robots.txt HTTP/1.0
server SERVER_A 1.2.3.4:80 cookie app_01 check
server maintenance 127.0.0.1:8080 backup
В конечном итоге моя цель - иметь возможность включить поддержку активности между браузером и haproxy с требованием иметь возможность запускать отчет, который может занять 2-3 минуты на серверах приложений.
Просто чтобы немного уточнить. Надеюсь, это также ответит на ваши вопросы.
время ожидания http-запроса
Время от первого полученного клиентского байта до последнего байта, отправленного клиенту (независимо от сохранения активности). Поэтому, если ваш бэкэнд слишком медленный или клиент слишком медленно отправляет свой запрос, вся коммуникация может занять больше времени, и запрос будет отброшен (и тайм-аут отправлен клиенту).
тайм-аут http-keep-alive
Время поддерживать соединение между haproxy и клиентом открытым (после отправки ответа клиента). Это не имеет ничего общего со временем ответа серверной части. Это не имеет ничего общего с длиной одного запроса (т.е. таймаутом http-запроса). Это позволяет быстрее отвечать, если пользователь запрашивает несколько ресурсов (например, html, img и js). С сохранением активности отдельные запросы могут использовать одно и то же TCP-соединение. Таким образом сокращается время загрузки полной веб-страницы.
сервер тайм-аута
Это тайм-аут для ваших внутренних серверов. При достижении haproxy отвечает 504 (таймаут шлюза). Это также не имеет ничего общего с сохранением активности, поскольку касается только соединения между прокси и серверной частью.