当 HAProxy 发送 503 HTTP 代码时,如何使用自定义 503 错误文档?

当 HAProxy 发送 503 HTTP 代码时,如何使用自定义 503 错误文档?

我希望当后端服务器发送 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 个月后)。

相关内容