https://discourse.haproxy.org/t/shared-frontends-h...
я так понимаю, что перед фронтом, который занимается терминированием SSL, ставится ещё один фронтэнд в режиме tcp, который занимается роутингом по бэкам с использованием списков по совпадению TLS SNI. В нем ставишь ACL на тот сервер, который требует HTTPS, ACL под его SNI и бэк по условию, а остальной трафик проваливаешь на второй фронт самого себя (то есть трафик отправляется по loopback на соседний порт, где висит тот же самый haproxy, но трафик уже остается тот, где нужно терминировать SSL). На нем терминируешь SSL и раскидываешь трафик по бэкам.
То есть схема такая: Интернет -> TCP frontend -> ACL фильтр по SNI, если фильтр не пройден, то default backend localhost:port2, на нем уже HTTP frontend -> SSL termination -> backend по имени. Если фильтр пройден, то простой редирект на SSL backend:443.