Eu enfrentei o mesmo problema e demorei um pouco para descobrir por que isso estava acontecendo.
Meu ambiente é formado por 1 HAproxy e 2 nginx como backend com nodejs como um CGI.
A causa raiz é baseada em como o HAproxy cria a solicitação HTTP. Por padrão, o HAproxy não incluiria o cabeçalho do host na solicitação, portanto você precisa ser adicionado manualmente, caso contrário, o nginx retornará 400 como padrão e o HAproxy o marcará como não íntegro.
Exemplo abaixo:
-
Verificação de integridade do haproxy:
option httpchk HEAD / HTTP/1.1
-
Solicitação HTTP equivalente:
tony@calderona:~ $ telnet A.B.C.D 80 Trying A.B.C.D... Connected to A.B.C.D. Escape character is '^]'. HEAD / HTTP/1.1 HTTP/1.1 400 Bad Request Server: nginx/1.10.3 Date: Sun, 10 Dec 2017 09:52:12 GMT Content-Type: text/html Content-Length: 173 Connection: close
-
Verificação de integridade do haproxy:
option httpchk HEAD / HTTP/1.1\r\nHost:\ www.temporaryworkaround.org
-
Solicitação HTTP equivalente:
tony@calderona:~ $ telnet A.B.C.D 80 Trying A.B.C.D... Connected to A.B.C.D. Escape character is '^]'. HEAD / HTTP/1.1 host: www.temporaryworkaround.org HTTP/1.1 200 OK Server: nginx/1.10.3 Date: Sun, 10 Dec 2017 09:52:24 GMT Content-Type: text/html; charset=utf-8 Content-Length: 10282 Connection: keep-alive
Felicidades