Come posso utilizzare un documento di errore 503 personalizzato quando HAProxy invia un codice HTTP 503?


20

Vorrei che haproxy usasse la propria pagina del documento 503 quando il back server (backend) invia il codice HTTP 503. È possibile?

Ho visto qualcosa di simile alle condizioni "monitor fail" ma non so come aggiungerlo al frontend.

Risposte:


22

È possibile utilizzare la errorfiledirettiva e quindi un .httpfile di testo personalizzato . Quindi per esempio:

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

Il contenuto del file sarebbe quindi simile a:

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 errorfiledirettiva può essere specifica anche per un backend.

L'impostazione "errorfile" non può essere utilizzata per modificare una risposta inviata da HAProxy se i nodi sono online. Questa impostazione ha effetto su HAProxy solo quando tutti i nodi sono offline.

È importante comprendere che questa parola chiave non ha lo scopo di riscrivere gli errori restituiti dal server, ma gli errori rilevati e restituiti da HAProxy. Questo è il motivo per cui l'elenco degli errori supportati è limitato a un piccolo set.


2
Si noti che il file .http deve essere utilizzato \r\nper le interruzioni di riga nelle intestazioni per rispettare le specifiche del protocollo HTTP. Se si carica da una finestra di Windows, assicurarsi di utilizzare la binarymodalità per il trasferimento di file s / ftp per saltare la conversione delle interruzioni di linea di Windows in interruzioni \r\ndi linea in stile unix \n.
wqw

6

C'è qualcosa di sporco che puoi fare. È possibile bloccare le risposte 503, il che comporterà la restituzione dell'errore 502 personalizzato per il quale è possibile creare una pagina di errore. Tuttavia, tieni presente che qualsiasi motivo haproxy dovrebbe restituire un 502 (risposta non valida) restituirà la stessa cosa.

Fondamentalmente è semplice come "rspdeny ^ HTTP / 1.1 503" combinato con "errorfile 502".


5

Abbiamo una parte del nostro sito Web in esecuzione su un sistema legacy e ho finito per utilizzare quanto segue:

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

acl is_internal_error status ge 500

rspideny . if is_internal_error

Spero che sia d'aiuto (anche se dopo 8 mesi).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.