我希望当后端服务器发送 HTTP 503 代码时,haproxy 能够使用自己的 503 文档页面。可以吗?
已经看到类似“监控失败”的情况,但不知道如何将其添加到前端。
答案1
您可以使用errorfile
指令,然后使用自定义.http
文本文件。例如:
errorfile 503 /etc/haproxy/errors/503-mycustom.http
文件的内容将类似于:
HTTP/1.0 503 Service Unavailable
Cache-Control: no-cache
Connection: close
Content-Type: text/html
<html>
<head>
<title>RARRR!!!!!</title>
</head>
<body style="font-family:Arial,Helvetica,sans-serif;">
<div style="margin: 0 auto; width: 960px;">
<h2 >RAWR RAWR RAWR</h2>
</div>
</body>
</html>
该errorfile
指令也可以特定于后端。
如果节点在线,则无法使用“errorfile”设置来更改 HAProxy 发送的响应。此设置仅在所有节点都离线时影响 HAProxy。
重要的是要理解,此关键字并非用于重写服务器返回的错误,而是用于重写 HAProxy 检测并返回的错误。这就是为什么支持的错误列表仅限于一小部分。
答案2
您可以做一些肮脏的事情。您可以阻止响应 503,这将导致返回自定义 502 错误,您可以为此构建错误页面。但是,请记住,haproxy 必须返回 502(无效响应)的任何原因都将返回相同的内容。
基本上它就像“rspdeny ^HTTP/1.1 503”与“errorfile 502”结合起来一样简单。
答案3
我们网站的一部分在旧系统上运行,我最终使用了以下系统:
errorfile 502 /etc/haproxy/errors/502.http
acl is_internal_error status ge 500
rspideny . if is_internal_error
希望它能有所帮助(即使是 8 个月后)。