HAProxy SSL和粘性会话

我们正在尝试设置HAProxy(v1.5.1)以使用SSL。

虽然我们设法做到这一点,但我们在循环设置中遇到了一些问题:

我们希望有粘贴会话,但haproxy似乎将所有会话(从不同的浏览器)发送到相同的节点( my.vm.2 ),即使其他节点( my.vm.1 )也可用。 所以它看起来像循环设置不能正常工作。

这是我们目前的configuration,我们将不胜感激一些帮助/想法。 :):

 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 

我build议在HAProxy中进行所有SSL处理,并使用代理协议 ( send-proxyaccept-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地址保持不变。