![HAproxy 故障转移到抱歉页面](https://linux22.com/image/761370/HAproxy%20%E6%95%85%E9%9A%9C%E8%BD%AC%E7%A7%BB%E5%88%B0%E6%8A%B1%E6%AD%89%E9%A1%B5%E9%9D%A2.png)
我的用例如下:在配置中,我有一个前端,它监听 HTTPS 并为后端提供服务。后端有一台或多台服务器。当所有后端服务器都宕机时,我想提供一个抱歉页面,托管在另一个地方,提供一些停机信息。
我的第一个尝试是将抱歉的服务器放在与常规服务器相同的后端,但有一个check backup
选项。由于健康检查的主机头不能因服务器而异,所以这个尝试失败了。
我假设我需要为抱歉服务器添加一个单独的后端部分,以便我可以配置正确的健康检查和所有内容,但是如果常规后端关闭,我该如何配置前端以切换到抱歉后端?
HA-Proxy 版本 1.9.16-1ppa1~bionic
答案1
您可以使用nbsrv
https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#7.3.1-nbsrv
可以这样使用:
frontend https
bind (...)
acl backend_up_foo nbsrv(foo) -m int gt 0
use_backend foo if backend_up_foo
default_backend sorry
backend foo
(...)
backend sorry
http-request set-header Host sorry.example.org
(...)
为了在不重定向用户的情况下显示抱歉页面,我还使用了 Apache 中的重写,它提供“抱歉页面”:
<Directory "/path/to/sorry/page">
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) index.html
(...)
</Directory>
如果“抱歉页面”包含图像或其他文件,则可以将它们放在该目录中,这样RewriteCond
Apache 就可以正确地提供这些文件。所有其他 URL 都会在 Apache 内部重定向到实际的“抱歉页面”。