Se você ler na documentação do haproxy, você encontrará este parágrafo:
hdr(name) The HTTP header <name> will be looked up in each HTTP request.
Just as with the equivalent ACL 'hdr()' function, the header
name in parenthesis is not case sensitive. If the header is
absent or if it does not contain any value, the roundrobin
algorithm is applied instead.
Isso pode explicar por que o haproxy está fazendo o balanceamento de carga entre os servidores que não seguem as ACLs. Para ter certeza, você precisa verificar se realmente está recebendo a solicitação com host
header.
Acho que você pode usar o IP, nome ou URL de destino em vez de verificar o cabeçalho host
.