我可以根据 HTTP 方法配置 mod_proxy 使用不同的参数吗?

我可以根据 HTTP 方法配置 mod_proxy 使用不同的参数吗?

我正在使用mod_proxy具有两个平衡成员的故障转移代理。

虽然mod_proxy将死节点标记为死亡,但它仍会每分钟向每个死节点路由一个请求,如果仍然死亡,则会向客户端返回 503(如果maxattempts=0)或在另一个节点上重试(如果它> 0)。

后端提供 REST Web 服务。目前我已设置,maxattempts=0因为我不想重试 POST 和 DELETE。这意味着当一个节点死机时,每分钟都会有一个随机客户端收到 503。不幸的是,我们的大多数客户端将 503 之类的代码解释为“一切都死机了”,而不是“这不起作用,但请重试”。

为了在代理层编写某种类型的安全请求自动重试程序,我想配置 mod_proxy 以用于maxattempts=1GET 和 HEAD 请求以及maxattempts=0所有其他 HTTP 方法。

这可能吗?(如何实现?:)

答案1

我认为你可能运气不佳——据我所知,这样做的“明显”方式(使用块<Limit>)仅适用于与访问控制相关的操作;我怀疑这是不可行的。

不过,总的来说,我认为这不会达到你想要的效果。根据我的经验,你通常实际上想做的是对面的你所描述的;对多个后端重试非幂等请求通常是一个坏主意(以防他们执行了操作但没有报告成功);你最好快速失败所有操作并让浏览器在需要时处理重试。

答案2

如果问题是由于客户端应用程序误解了服务器返回代码而导致的,那么您应该修复客户端。

您还会发现,某些客户端请求失败而其他请求正常,这会让您的客户端感到困惑,使得编写过于复杂的故障处理程序变得非常困难。

相关内容