Haproxy:如果出现 404,请尝试不同的后端

Haproxy:如果出现 404,请尝试不同的后端

我有一个 haproxy 服务器,其后有多个后端。后端采用循环方式选择;无论如何,如果它从所选的后端获得 404,我需要它尝试其他后端。

如果所有可访问的后端都返回 404,则 haproxy 应该向客户端返回 404。

那可能吗?

答案1

不,目前还不可能。

如果在发送请求之前出现错误(例如连接超时),HAProxy 会重试另一个后端服务器。如果与一个后端服务器建立了连接并发送了请求,即使只有一个字节,HAProxy 也不会尝试使用另一个后端服务器。

答案2

否。 option redispatch这是 HAProxy 最接近的功能,但只有在大于 0 且与后端的连接失败时,它才会重试不同的后端retries。它不关心来自后端的 HTTP 状态代码,它只关心后端是否关闭(无法访问,无响应)

答案3

是的,如果我理解正确的话,可以选择

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

其中 CheckHealth.html 应该是一个可达资源示例,如果未找到资源并且收到 404 错误,则该节点已设置为“活动或备份 SOFT STOPPED 进行维护”,并且循环永远不会再向该节点发送请求,仅切换到其他节点。

就像是 :

 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

将会在 www02 上失败,因为那里没有部署 WAR,而 www01 和 www03 上则保持平衡,客户端不会看到任何故障。

相关内容