Haproxy: pruebe con un backend diferente si es 404

Haproxy: pruebe con un backend diferente si es 404

Tengo un servidor haproxy con varios servidores detrás. Los backends se seleccionan mediante round-robin; de todos modos lo necesito para probar otros backends, si obtiene 404 del seleccionado.

Si se devuelve 404 desde todos los servidores accesibles, haproxy debería devolver 404 al cliente.

¿Es eso posible?

Respuesta1

No, no es posible (por el momento).

HAProxy reintenta otro servidor backend cuando hay errores antes de que se enviara la solicitud, por ejemplo, tiempo de espera de conexión. Si la conexión se establece con un servidor backend y se envía una solicitud, aunque sea un byte, HAProxy no intentará utilizar otro servidor backend.

Respuesta2

No. option redispatches lo más parecido que tiene HAProxy, pero solo reintentará un back-end diferente si retrieses> 0 y la conexión al respaldado falla. No le importa el código de estado HTTP del backend, solo le importa si retrocedió (no se puede localizar, no hay respuesta)

Respuesta3

Sí, si he entendido bien, con la opción.

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

Donde CheckHealth.html debería ser una muestra de recurso accesible, si no se encuentra el recurso y se recibe un error 404, el nodo se ha configurado en "activo o de respaldo DETENIDO SOFT para mantenimiento" y el roundrobin nunca volverá a enviar una solicitud a ese nodo cambiando a los demás solamente.

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

fallará en www02 porque no hay WAR implementado allí, y el saldo en www01, www03 no se mostrará ninguna falla al cliente.

información relacionada