有没有一种简单的方法可以禁用 haproxy 中的所有后端,而是提供适当的维护页面(用于 http 请求)?
我读了一些关于禁用选项的内容,我理解它是针对每个服务器的,但我想知道是否有办法简单地停止到所有后端的流量?
答案1
我们使用关键字backup
来实现这一点。请参见以下示例:
listen example_com 0.0.0.0:8001
...
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www.example.com\r\nUser-Agent:\ HAProxy
server web01 10.1.31.21:80 cookie cookie_web01 check inter 5000 rise 2 fall 5 disabled
server web02 10.1.31.22:80 cookie cookie_web02 check inter 5000 rise 2 fall 5 disabled
server prx 10.1.31.10:9000 backup
此处,两个服务器web01
和web02
均设置为disabled
,在这种情况下,将使用 10.1.31.10:9000 上的backup
服务器,该服务器提供维护页面。我们例子中的服务器是 HAProxy 服务器本身,并在端口 9000 上运行 Apache HTTPD,提供维护内容:prx
prx
<VirtualHost *:9000>
ServerName example.com
ServerAdmin [email protected]
DocumentRoot /var/www/example.com/errors/
<Directory /var/www/example.com/errors/>
Options -Indexes
</Directory>
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/systemDown.html -f
RewriteCond %{SCRIPT_FILENAME} !systemDown.html
RewriteRule ^.*$ /systemDown.html [R=503,L]
ErrorDocument 503 /systemDown.html
</VirtualHost>
答案2
这篇博文帮助了我:https://rimuhosting.com/knowledgebase/creating-a-maintenance-page-for-your-site
它建议设置/自定义 503 错误处理程序:
errorfile 503 /var/www/503maintance.html
笔记:您需要在错误处理程序文件中包含 http 标头:
HTTP/1.0 503 Service Unavailable
Cache-Control: no-cache
Connection: close
Content-Type: text/html
答案3
那么重定向或 redir 怎么样
一个简单的 redir 示例
server srv1 10.0.0.10:80 redir http://maintenance.domain.com check
可以在所有默认选项中设置重定向。
答案4
您可以指定没有服务器指令的后端,而只指定 503 错误页面。
您唯一需要做的就是(临时)更改选项default_backend
,或者您可以创建一个acl
:
frontend public
# default_backend www
default_backend www-maintenance
backend www-maintenance
errorfile 503 /etc/haproxy/error/503.http
backend www
server www 10.0.0.1:8080 check