我正在使用mod_proxy
具有两个平衡成员的故障转移代理。
虽然mod_proxy
将死节点标记为死亡,但它仍会每分钟向每个死节点路由一个请求,如果仍然死亡,则会向客户端返回 503(如果maxattempts=0
)或在另一个节点上重试(如果它> 0)。
后端提供 REST Web 服务。目前我已设置,maxattempts=0
因为我不想重试 POST 和 DELETE。这意味着当一个节点死机时,每分钟都会有一个随机客户端收到 503。不幸的是,我们的大多数客户端将 503 之类的代码解释为“一切都死机了”,而不是“这不起作用,但请重试”。
为了在代理层编写某种类型的安全请求自动重试程序,我想配置 mod_proxy 以用于maxattempts=1
GET 和 HEAD 请求以及maxattempts=0
所有其他 HTTP 方法。
这可能吗?(如何实现?:)
答案1
我认为你可能运气不佳——据我所知,这样做的“明显”方式(使用块<Limit>
)仅适用于与访问控制相关的操作;我怀疑这是不可行的。
不过,总的来说,我认为这不会达到你想要的效果。根据我的经验,你通常实际上想做的是对面的你所描述的;对多个后端重试非幂等请求通常是一个坏主意(以防他们执行了操作但没有报告成功);你最好快速失败所有操作并让浏览器在需要时处理重试。
答案2
如果问题是由于客户端应用程序误解了服务器返回代码而导致的,那么您应该修复客户端。
您还会发现,某些客户端请求失败而其他请求正常,这会让您的客户端感到困惑,使得编写过于复杂的故障处理程序变得非常困难。