Como posso usar um documento de erro 503 personalizado quando o HAProxy envia um código HTTP 503?

17

Eu gostaria que o haproxy usasse sua própria página de documento 503 quando o back server (backend) envia o código HTTP 503. É possível?

Ter visto algo como "monitorar falha", mas não sabe como adicioná-lo ao frontend.

    
por Marcin 18.03.2011 / 19:24

3 respostas

19

Você pode usar a diretiva errorfile e, em seguida, um arquivo de texto .http personalizado. Então, por exemplo:

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

O conteúdo do arquivo seria algo como:

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>

A diretiva errorfile também pode ser específica para um back-end.

A configuração "errorfile" não pode ser usada para alterar uma resposta enviada pelo HAProxy se os nós estiverem online. Essa configuração afeta apenas o HAProxy quando todos os nós estão 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.

    
por 18.03.2011 / 19:36
6

Existe algo sujo que você pode fazer. Você pode bloquear respostas 503, o que resultará em retornar o erro 502 personalizado para o qual você pode criar uma página de erro. No entanto, tenha em mente que qualquer motivo que o haproxy deva retornar um 502 (resposta inválida) retornará a mesma coisa.

Basicamente é tão simples quanto "rspdeny ^ HTTP / 1.1 503" combinado com "errorfile 502".

    
por 19.03.2011 / 08:34
5

Temos uma parte do nosso site em execução em um sistema legado e acabamos usando o seguinte:

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

acl is_internal_error status ge 500

rspideny . if is_internal_error

Espero que ajude (mesmo que seja 8 meses depois).

    
por 21.11.2011 / 21:39