"Melhor" está no olho de quem vê, então esta resposta é apenas uma aproximação.
HAProxy é ótimo se:
- Você precisa do maior desempenho possível do balanceador de carga por máquina.
- Você não precisa de terminação SSL no balanceador de carga.
- Você valoriza a confiabilidade e a estabilidade da versão.
nginx é ótimo se:
- Você deseja mais pré e pós-processamento do fluxo HTTP no balanceador de carga, como compactação GZip ou terminação SSL.
- Você valoriza o buffer de conexão, em que o balanceador de carga armazenará em buffer o conteúdo entre os clientes e os servidores de back-end (útil para alguns back-ends de 'linguagem de script' com alta sobrecarga de conexão).