我遇到过一种特殊情况,如果运行的是旧版本的代码,HaProxy 后面的一些应用服务器会针对某些请求返回 500 代码。通常,这种情况只会在集群升级过程中发生,但如果部署部分失败,也可能会发生这种情况。同一池中的另一个应用服务器很可能能够为该请求提供服务。
我想知道 HAProxy 是否可以检测到后端服务器对特定请求回复了 500 错误(不使用健康检查),并在另一台服务器上重试。有点像Option redispatch
错误而不是 http 超时。
似乎 http 请求只会发送到客户端浏览器,而不会返回 Haproxy,但我想问问是否有人解决了这个问题,甚至可能使用了 WAF 或双向代理。
答案1
在 HAProxy 版本 >2.0 上是:添加retry-on all-retryable-errors
到相关后端。
但要小心(POST 请求可能会重试,导致重复的数据库操作);请参阅https://www.haproxy.com/blog/haproxy-layer-7-retries-and-chaos-engineering/