¿Cómo puedo usar un documento de error 503 personalizado cuando HAProxy envía un código HTTP 503?


20

Me gustaría que haproxy use su propia página de documentos 503 cuando el servidor posterior (backend) envíe el código HTTP 503. ¿Es posible?

He visto algo así como condiciones de "falla de monitor" pero no sé cómo agregarlo a la interfaz.

Respuestas:


22

Puede usar la errorfiledirectiva y luego un .httparchivo de texto personalizado . Así por ejemplo:

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

El contenido del archivo sería algo así 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>

La errorfiledirectiva también puede ser específica para un backend.

La configuración "archivo de error" no se puede usar para cambiar una respuesta enviada por HAProxy si los nodos están en línea. Esta configuración solo afecta a HAProxy cuando todos los nodos están fuera de línea.

Es importante comprender que esta palabra clave no pretende reescribir los errores devueltos por el servidor, sino los errores detectados y devueltos por HAProxy. Es por eso que la lista de errores admitidos se limita a un conjunto pequeño.


2
Tenga en cuenta que el archivo .http debe usarse \r\npara los saltos de línea en los encabezados para cumplir con la especificación del protocolo HTTP. Si carga desde un cuadro de Windows, asegúrese de usar el binarymodo para la transferencia de archivos s / ftp para omitir la conversión de saltos de línea de Windows a saltos \r\nde línea de estilo Unix \n.
wqw

6

Hay algo sucio que puedes hacer. Puede bloquear las respuestas 503, lo que dará como resultado la devolución del error 502 personalizado para el que puede crear una página de error. Sin embargo, tenga en cuenta que cualquier razón por la cual un haproxy tendría que devolver un 502 (respuesta no válida) devolverá lo mismo.

Básicamente es tan simple como "rspdeny ^ HTTP / 1.1 503" combinado con "errorfile 502".


5

Tenemos una parte de nuestro sitio web que se ejecuta en un sistema heredado, y terminé usando lo siguiente:

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

acl is_internal_error status ge 500

rspideny . if is_internal_error

Espero que ayude (incluso si es 8 meses después).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.