HAproxy 故障转移到抱歉页面

HAproxy 故障转移到抱歉页面

我的用例如下:在配置中,我有一个前端,它监听 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>

如果“抱歉页面”包含图像或其他文件,则可以将它们放在该目录中,这样RewriteCondApache 就可以正确地提供这些文件。所有其他 URL 都会在 Apache 内部重定向到实际的“抱歉页面”。

相关内容