我已经设置 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)仅用于调试/故障排除,是找出平衡器真实行为的绝佳工具。