Как сделать так, чтобы прокси-сервер HA оставался активным

В моей среде у меня есть балансировка нагрузки haproxy для 2 веб-серверов (Apache), это моя конфигурация прокси-сервера HA:

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
        tune.ssl.default-dh-param 2048
    daemon
        nbproc      1
    stats socket /var/lib/haproxy/stats
        stats       timeout 1m
        nogetaddrinfo
listen front
    bind :80
    redirect scheme https if { hdr(Host) -i domain.com } !{ ssl_fc }
listen front_ssl
    bind :443 ssl crt /opt/certificate/domain.pem
    mode http
        option dontlognull
    stats      enable
    stats      uri /ha?stats
    stats      realm system
    stats      auth root:*********
    stats      refresh 5s
    option http-keep-alive
    option forwardfor
    option redispatch
    reqadd X-Forwarded-Proto:\ https if { ssl_fc }
         timeout client  15s
        timeout connect 3s
        timeout server  15s
        timeout http-request 15s
        timeout http-keep-alive 15s
        default_backend bk_http
backend bk_http
        mode http
        balance source
        option http-keep-alive
        default-server inter 1s
        retries 3
        timeout connect 3s
        timeout server  15s
        timeout queue 60s
        timeout check 10s
        timeout http-request 15s
        timeout http-keep-alive 15s
        server node1 1.2.3.4:82 check id 1 weight 1 maxconn 2000 maxqueue 2000
        server node2 5.6.7.8:82 check id 1 weight 1 maxconn 2000 maxqueue 2000

«KeepAlive On» в /etc/httpd/conf/httpd.conf Но когда я тестирую curl, я вижу, что keepalive не работает:

curl -Iv http://domain.com 2>&1 | grep -i 'connection #0'
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Closing connection #0
curl -Iv https://domain.com 2>&1 | grep -i 'connection #0'
* Closing connection #0

Насколько я знаю, если keepalive работает, результат должен быть:

  0   162    0     0    0     0      0      0 --:--:--  0:00:05 --:--:--     0* Connection #0 to host domain.com left intact
* Closing connection #0

Пожалуйста, дайте мне знать, если что-то не так в моей конфигурации?


person user36814    schedule 27.01.2015    source источник
comment
В отличие от форумов, мы не используем слова «Спасибо» или «Любая помощь приветствуется» или подписи на Stack Overflow. См. раздел Должен ли быть "Привет", "спасибо" слоганов и приветствий удалить из постов?. Кстати, это заранее спасибо, а не спасибо заранее.   -  person John Saunders    schedule 27.01.2015


Ответы (1)


У вас правильная конфигурация. Вам просто требуется option http-keep-alive, который используется по умолчанию для haproxy 1.5. Проверьте, какая версия у вас установлена.

См. http://www.haproxy.org/download/1.5/doc/configuration.txt раздел 4. Прокси

В режиме HTTP обработка, применяемая к запросам и ответам, проходящим через соединение, зависит от комбинации параметров HTTP интерфейса и сервера. HAProxy поддерживает 5 режимов подключения:

  • KAL : поддерживать активность ("опция http-keep-alive"), который является режимом по умолчанию: все запросы и ответы обрабатываются, а соединения остаются открытыми, но бездействуют между ответами и новыми запросами.

  • TUN: туннель («опция http-tunnel»): это был режим по умолчанию для версий с 1.0 по 1.5-dev21: обрабатываются только первый запрос и ответ, а все остальное пересылается без какого-либо анализа. Этот режим не следует использовать, так как он создает много проблем с ведением журнала и обработкой HTTP.

  • PCL: пассивное закрытие ("опция httpclose"): точно так же, как в туннельном режиме, но с добавлением "Connection: close" в обоих направлениях, чтобы попытаться закрыть оба конца после первого обмена запрос/ответ.

  • SCL: server close ("опция http-server-close"): соединение с сервером закрывается после получения конца ответа, но соединение с клиентом остается открытым.

  • FCL: принудительное закрытие ("опция forceclose"): соединение активно закрывается после окончания ответа.

Ваши бэкэнды, node1/node2, вероятно, закрывают соединение. Возможно, у них не включена поддержка активности.

При перехвате трафика проверка на http/1.1 и отсутствие заголовка "Connection: close"

person KCD    schedule 26.08.2015