How can I use a custom 503 error document when HAProxy sends a 503 HTTP code?

Solution 1:

You can use the errorfile directive and then a custom .http text file. So for example:

errorfile 503 /etc/haproxy/errors/503-mycustom.http

Content of the file would then be something like:

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>

The errorfile directive can be specific to a backend as well.

The "errorfile" setting cannot be used to change a response sent by HAProxy if nodes are online. This setting only affects HAProxy when all nodes are offline.

It is important to understand that this keyword is not meant to rewrite errors returned by the server, but errors detected and returned by HAProxy. This is why the list of supported errors is limited to a small set.

Solution 2:

There is something dirty you can do. You can block responses 503, which will result in returning the custom 502 error for which you can build an error page. However, keep in mind that any reason haproxy would have to return a 502 (invalid response) will return the same thing.

Basically it's as simple as "rspdeny ^HTTP/1.1 503" combined with "errorfile 502".


Solution 3:

We have a portion of our website running on a legacy system, and I ended up using the following:

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

acl is_internal_error status ge 500

rspideny . if is_internal_error

Hope it helps (even if it is 8 months later).