Sim, a maneira como você tem as coisas configuradas basicamente fará o balanceamento de carga de todas as conexões de entrada entre os servidores de back-end.
O que você quer é basicamente uma definição de back-end para cada servidor web real. Eu acho que a essência do que você quer é múltiplas definições de backend, uma para cada servidor web real. Em seguida, na seção frontend, você deseja usar vários condicionais para usar o back-end associado para qualquer URL de front-end solicitado. Uma pseudo-configuração pode ser algo assim:
frontend localhost
mode http
use_backend web1 if { hdr(host) -i abc.com }
use_backend web1 if { hdr(host) -i def.com }
use_backend web2 if { hdr(host) -i cba.com }
use_backend web2 if { hdr(host) -i fed.com }
backend web1
server web1 web1.foo.com
backend web2
server web2 web2.foo.com
Observe o mode http
. Acredito que é necessário realmente fazer coisas como tomar decisões com base em cabeçalhos HTTP.
E quando é hora de mover quais URLs vão para o backend, é uma simples questão de atualizar o arquivo de configuração e fazer uma atualização para o haproxy.