O problema é causado pelo seu tempo limite extremamente grande. Com um tempo limite de 24 horas e um limite para 1.000 conexões simultâneas, você pode claramente esperar que isso seja preenchido com clientes desconectando a maneira suja. Por favor, use um tempo limite mais razoável, de minutos a horas, no máximo, não faz sentido usar tempos limite de 1 dia na internet. Como o DukeLion disse, o sistema está aguardando o haproxy fechar a conexão, porque o haproxy não recebeu o fechamento do cliente.
Haproxy está trabalhando em modo de túnel para TCP e WebSocket, segue o usual 4-way close:
- receive a close on side A
- forward the close on side B
- receive the close on side B
- forward the close on side A
No seu caso, suponho que o lado A seja o servidor e o lado B o cliente. Então nginx fechou depois de algum tempo, soquete foi para CLOSE_WAIT, haproxy encaminhou o fechamento para o cliente, esse soquete foi para FIN_WAIT1, o cliente ACKed, passando o soquete para FIN_WAIT2 e então nada acontece porque o cliente desapareceu, o que é algo muito comum na rede. E o seu tempo limite significa que você quer que isso continue assim por 24 horas.
Após 24 horas, suas sessões começarão a exceder o tempo no lado do cliente, então o haproxy irá matá-las e encaminhará o próximo ao lado do nginx, livrando-se dele também. Mas, claramente, você não quer que isso aconteça, o WebSocket foi projetado para que a conexão inativa possa ser reaberta de maneira transparente, portanto, não há motivo para manter uma conexão inativa aberta por 24 horas. Nenhum firewall irá mantê-lo ao longo do caminho!