Your application uses both HTTP and HTTPS, depending on the pages. SSL encryption is achieved by your backend server directly. You want your user to get connected to the same backend for both protocols.

Configuration

This configuration has to be applied on the Layer7 (HAProxy) tab of the ALOHA. Whatever protocol is used on the first request, your client IP will be associated with a backend and inserted in a sticky table.

global
  stats socket ./haproxy.stats level admin

frontend ft_http
  bind :80
  mode http
  default_backend bk_http

frontend ft_https
  bind :443
  mode tcp
  default_backend bk_https

backend bk_http
  mode http
  balance roundrobin
  stick on src table bk_https
  default-server inter 1s
  server s1 192.168.1.1:80 check id 1
  server s2 192.168.1.2:80 check id 2

backend bk_https
  mode tcp
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  default-server inter 1s
  server s1 192.168.1.1:443 check id 1
  server s2 192.168.1.2:443 check id 2

Result:

echo "show table https" | socat unix-connect:./haproxy.stat stdio
# table: https, type: ip, size:204800, used:2
0x1fea474: key=192.168.1.250 use=0 exp=1764443 server_id=1
0x2014a24: key=192.168.1.251 use=0 exp=1798278 server_id=2

Related:

Subscribe to our blog. Get the latest release updates, tutorials, and deep-dives from HAProxy experts.