Haproxy: tente um back-end diferente se for 404

Haproxy: tente um back-end diferente se for 404

Eu tenho um servidor haproxy com vários back-ends por trás dele. Os backends são escolhidos com round-robin; de qualquer forma, preciso tentar outros back-ends, se obtiver 404 do selecionado.

Se 404 for retornado de todos os backends acessíveis, o haproxy deverá retornar 404 ao cliente.

Isso é possível?

Responder1

Não, não é possível (por enquanto).

O HAProxy tenta novamente outro servidor back-end quando há erros antes do envio da solicitação, por exemplo, tempo limite de conexão. Se a conexão for estabelecida com um servidor backend e a solicitação for enviada, mesmo que seja um byte, o HAProxy não tentará usar outro servidor backend.

Responder2

Não. option redispatché a coisa mais próxima que o HAProxy tem, mas ele só tentará novamente um back-end diferente se retriesfor> 0 e a conexão com o backup falhar. Ele não se importa com o código de status HTTP do back-end, apenas se importa se o backup foi feito (não pode ser alcançado, sem resposta)

Responder3

Sim, se bem entendi, com a opção

option httpchk GET /../CheckHealth.html
http-check disable-on-404

Onde CheckHealth.html deve ser uma amostra de recurso acessível, se o recurso não for encontrado e um erro 404 recebido, o nó foi definido como "ativo ou backup SOFT STOPPED para manutenção" e o roundrobin nunca enviará solicitação novamente para esse nó mudando para os outros apenas.

Algo como :

 backend backend_servers
 balance            roundrobin
 option httpchk GET /.../CheckHealth.html
 http-check disable-on-404
 server             www01 XX:YY:ZZ:KK:8180 check
 server             www02 XX:YY:ZZ:MM:8180 check
 server         www03 XX:YY:ZZ:FF:8180 check

falhará em www02 porque não há WAR implantado lá e equilibrará em www01, www03 sem falha mostrada ao cliente.

informação relacionada