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


20

我希望haproxy在后台服务器(后端)发送HTTP 503代码时使用其自己的503文档页面。可能吗?

遇到过类似“监控器失败”的情况,但不知道如何将其添加到前端。

Answers:


22

您可以使用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指令也可以特定于后端。

如果节点在线,则无法使用“错误文件”设置来更改HAProxy发送的响应。当所有节点都脱机时,此设置仅影响HAProxy。

重要的是要理解,此关键字不是要重写服务器返回的错误,而是要重写HAProxy检测并返回的错误。这就是为什么支持的错误列表被限制为一小组的原因。


2
请注意,.http文件必须\r\n用于标头中的换行符,以符合HTTP协议规范。如果从Windows盒上传,请确保使用binarys / ftp文件传输模式来跳过将Windows换行符转换\r\n为Unix样式换行符的操作\n
wqw 2014年

6

您可以做一些肮脏的事情。您可以阻止响应503,这将导致返回自定义502错误,您可以为其建立错误页面。但是,请记住,haproxy必须返回502(无效响应)的任何原因都将返回相同的结果。

基本上,它就像“ rspdeny ^ HTTP / 1.1 503”和“ errorfile 502”一样简单。


5

我们有一部分网站在旧版系统上运行,最终我使用了以下内容:

errorfile 502 /etc/haproxy/errors/502.http

acl is_internal_error status ge 500

rspideny . if is_internal_error

希望它会有所帮助(即使是8个月后)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.