Назад | Перейти на главную страницу

HAProxy с SSL и липкими сессиями

Мы пытаемся настроить HAProxy (v1.5.1) для использования SSL.

Хотя нам это удалось, у нас есть некоторые проблемы с настройками циклического перебора:

Мы действительно хотим иметь сеансы Stick, но похоже, что haproxy отправляет все сеансы (из разных браузеров) на один и тот же узел (my.vm.2), даже если другой узел (my.vm.1) также доступен. Таким образом, похоже, что настройка кругового алгоритма работает неправильно.

Это наша текущая конфигурация, мы будем благодарны за помощь / идеи. :):

global
   debug
   stats socket /etc/haproxy/haproxysock level admin
   tune.ssl.default-dh-param 2048

defaults
   mode http
   balance roundrobin
   timeout connect 5s
   timeout queue   300s
   timeout client  300s
   timeout server  300s

frontend https_frontend
   bind *:8443
   mode tcp
   reqadd X-Forwarded-Proto:\ https
   default_backend my_backend


backend my_backend
   mode tcp
   stick-table type ip size 200k expire 30m
   stick on src
   default-server inter 1s
   server my.vm.1 my.vm.1:8443 check id 1 maxconn 500
   server my.vm.2 my.vm.2:8443 check id 2 maxconn 500
   option httpclose
   option redispatch
   retries 15

listen admin
   bind *:8081
   stats enable
   stats refresh 1s

Я бы предложил выполнять всю вашу обработку SSL в HAProxy и использовать протокол прокси (send-proxy и accept-sslproxy), поэтому информация о клиенте передается от ssl-процессора на интерфейс + серверную часть. Это выглядит примерно так:

listen ssl-proxy
    bind 1.2.3.4:443 ssl crt /etc/ssl/mycert.pem npn http/1.1
    mode tcp
    bind-process 2 3 4
    server http 127.0.0.1:80 send-proxy

frontend dev
    #Do whatever you want here since it is http
    mode http
    bind 1.2.3.4:80 name dev
    bind 127.0.0.1:80 accept-proxy name accept-sslproxy
    bind-process 1

    acl is_ssl dst_port 443
    reqadd X-Forwarded-Proto:\ https if is_ssl
    default_backend my_backend

backend my_backend
    mode http
    #Do whatever you want here since it is http

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