Apache 的 ProxyPass 指令的后备位置?

Apache 的 ProxyPass 指令的后备位置?

我已经设置 Apache 使用 ProxyPass 向 camera.example.com 发送可通过与 Apache 所运行的服务器不关联的 IP 地址访问的网络摄像头的请求:

[摄像头] -- [nat / prt frwrd] -- [11.22.33.44]-- [互联网] -- [网络服务器]

Apache 虚拟主机指令中与“example.com”相关的条目:

<VirtualHost *>
  ServerName camera.example.com
  ProxyRequests Off
  ProxyPass / http://11.22.33.44/
  ProxyPassReverse / http://11.22.33.44/
</VirtualHost>

效果很好,但是相机并不总是打开的。在这种情况下,我希望 Apache 在访问我的相机时提供另一个网页,而不是显示“未找到”错误。

如果第一个地址(相机的地址)不可用,是否可以设置某种“后备”地址?

答案1

您可以使用负载平衡能力对于 Apache 来说,它也具有内置的自动故障转移功能。

您的配置如下:

ProxyPass / balancer://hotcluster/
<Proxy balancer://hotcluster>
 BalancerMember http://addres.of.the.camera timeout=15 retry=300
 BalancerMember http://address.of.backup.server status=+H
</Proxy> 

您只需用 +H - 热备用标记备份服务器。只要摄像机回答 [暂停秒] - 流量被发送到它;如果没有 - Apache 开始向备份机器发送流量,并且会每隔一段时间检查一次摄像头重试秒。

答案2

如果这是公共 IP 地址,某些 DNS 提供商会 ping 您的 IP 地址,并在不可用时故障转移到备用 IP 地址。我们为此使用 dnsmadeeasy.com。

然而要注意的一点是,它可能只每 5 分钟左右检查一次,因此故障转移和故障恢复不是即时的。

答案3

这个配置对我来说没有故障转移,我认为它只有在达到超时时才会激活,但是 500 个错误怎么办?

根据 apache 文档,我进行了不同的设置: https://httpd.apache.org/docs/trunk/howto/reverse_proxy.html https://httpd.apache.org/docs/trunk/mod/mod_proxy_hcheck.html

ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}

<Proxy balancer://hotcluster>
  BalancerMember http://addres.of.the.camera timeout=15 hcmethod=HEAD hcexpr=ok234
  BalancerMember http://address.of.backup.server status=+H
</Proxy>

ProxyPass / balancer://hotcluster/
ProxyPassReverse / balancer://hotcluster/

<Location "/balancer-manager">
SetHandler balancer-manager
Require host localhost
</Location>

最后一个位置(balancer-manager)仅用于调试/故障排除,是找出平衡器真实行为的绝佳工具。

相关内容