Haproxy - время ожидания http-запроса против времени ожидания http-keep-alive против сервера времени ожидания

Я пытаюсь обернуть голову вокруг того, как параметры haproxy

timeout http-request <timeout>
timeout http-keep-alive <timeout>
timeout server <timeout>

взаимодействовать друг с другом. Я использую веб-сайт Apache на двух серверах приложений, которые работают за балансировщиком нагрузки haproxy. Сейчас у меня нет поддержки активности, но я экспериментировал с ней, потому что думаю, что это поможет оптимизировать сайт. Моей целью было включить поддержку активности для соединения между браузером и haproxy, но отключить поддержку активности между haproxy и apache. Я сделал это с

option http-server-close

Сейчас я смотрю на настройку тайм-аутов поддержки активности. Я изучал руководство по haproxy для опции тайм-аута http-запроса, опции тайм-аута http-keep-alive и опции сервера тайм-аута. Если я правильно понимаю руководство, тайм-аут http-keep-alive - это время, чтобы сохранить соединение открытым между новыми запросами, а тайм-аут http-запроса - это время ожидания заголовков ответа перед закрытием соединения. Но я не могу понять, что диктует сервер тайм-аута. Я хочу сказать, что сервер тайм-аутов - это время ожидания полного ответа, но кто-нибудь может это подтвердить? Если я прав, что сервер тайм-аутов - это время ожидания полного ответа, то я прав, что он не должен иметь никакого отношения к настройкам тайм-аута поддержки активности?

Вот мой конфиг 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 минуты для запуска на серверах приложений.

1 ответ

Решение

Просто чтобы немного уточнить. Я надеюсь, что это также отвечает на ваши вопросы.

тайм-аут http-запроса

Время от первого полученного клиентского байта до последнего отправленного клиенту байта (независимо от активности). Поэтому, если ваш серверный модуль слишком медленный или клиент отправляет свой запрос слишком медленно, весь обмен данными может занять больше времени, чем этот, и запрос будет отброшен (и тайм-аут отправлен клиенту).

тайм-аут http-keep-alive

Время держать соединение открытым между haproxy и клиентом (после отправки ответа клиента). Это не имеет никакого отношения к времени отклика сервера. Это не имеет никакого отношения к длине одного запроса (то есть время ожидания http-запроса). Это позволяет быстрее получать ответы, если пользователь запрашивает несколько ресурсов (например, html, img и js). При поддержке активности одиночные запросы могут использовать одно и то же TCP-соединение. Таким образом, время загрузки полной веб-страницы сокращается.

сервер тайм-аута

Это время ожидания для ваших внутренних серверов. Когда достигнуто, haproxy отвечает 504 (время ожидания шлюза). Это также не имеет ничего общего с поддержанием активности, поскольку речь идет только о связи между прокси и бэкэндом.

Другие вопросы по тегам