Apache httpd 工作者重试

Dav*_*omb 7 mod-proxy 500-error apache-2.2 apache-2.4

我有一个运行 mod_proxy 和 mod_proxy_balancer 的 Apache httpd Web 服务器。整个 /somedir 被发送到 2 台工作机器,这些机器使用循环调度程序为请求提供服务。每台工作机器都在运行 IIS,但我认为这并不重要。

我可以通过重复请求包含机器 IP 地址的单个页面来演示负载平衡器的工作,并且可以看到它以可预测的循环方式从一个页面切换到另一个页面。

如果我关闭其中一台 IIS 服务器并开始请求相同的页面,则每个页面仅包含已启动机器的 IP 地址。但是,如果我启动 IIS 并且不运行我的 IIS 应用程序,那么 /somedir 将返回 500(应该如此)。

我已将 500 添加到故障状态(Apache 2.4)中,因此当它遇到错误时,Apache 会将工作机器置于错误状态。尽管如此,Apache 仍然将代理错误返回给客户端。如何让 Apache 捕获代理故障并以与连接故障相同的方式使用不同的工作器重试。

更新

在 StackOverflow 中提出了几乎相同的问题,因此将它们结合在一起。

/sf/ask/775859521/

小智 4

我已经与 httpd 邮件列表上的开发人员交谈过,他确认当前的代码库中尚未实现此功能。我自己也审阅了代码。mod_proxy_balancer 内部的状态机无法重试 HTTP 错误,但只能在连接错误时重试。我尝试自己实现它,但它太复杂了,我很容易使代码库不稳定。

所以这个问题今天还没有已知的解决方案......

  • 我在 httpd 开发列表中找到了你的问题!这就是我在这里问的原因。我自己查看了代码,它表明当你遇到 500 错误时,你就脱离了重试机制。httpd-dev 表示他们会在有时间的时候尝试实现它,但目前还没有计划。 (2认同)