与Apache mod_proxy热备份(或等效)502错误

任何人都知道如何configuration热备用(+ H)mod_proxyfunction,以便在closures期间立即发生接pipe(即使没有一个用户接收502)错误?

我们不是在寻找真正的负载均衡,我们只是希望辅助服务器在我们closures主服务器的时候接pipe。

问题是,无论什么时候主服务器出现故障,我都可以在第二台服务器实际接pipe之前,发送一个无效的请求,导致502 HTTP错误到达terminal用户。

Listen 80 <VirtualHost 127.0.0.1:80> ServerName domain.com ProxyPass / balancer://balance/ <Proxy balancer://balance/> BalancerMember http://primary_ip:80 BalancerMember http://secondary_ip:80 status=+H </Proxy> </VirtualHost> 

如果您首先明确禁用主要平衡器成员(在closures主要服务器之前),则Apache将高兴地将请求路由到次要平衡器成员。 收购立即发生。

要做到这一点,首先使用config启用平衡器pipe理器:

 <Location /lb> SetHandler balancer-manager </Location> 

然后,您可以通过访问/ lb以交互方式或编程方式启用/禁用平衡器成员。

与karmawhore的评论相反,像这样的热备份设置与健康检查没有任何关系。

Apache不支持对此进行必要的健康检查。 即使进行了健康检查,在检查请求可能无效的情况下也有一个窗口。

你可以写一些重复testing一个小的静态文件来强制代理识别平衡器失败。

我记得一个老的mod_perl解决scheme:

http://search.cpan.org/~mgregoro/Apache-HealthCheck-0.01/lib/Apache/HealthCheck.pm

我认为你可以使用ErrorDocument指令。 如果你指定了你正在寻找的错误代码,而不是静态页面(比如/missing.html),你可以指定一个PHP页面来处理你​​的redirect。 就像是:

 ErrorDocument 502 /redir.php 

然后在redir.php中有这样的东西:

 <?php header("Location: ...page that was asked for..."); ?>