Как я могу использовать пользовательский документ об ошибке 503, когда HAProxy отправляет код 503 HTTP?


20

Я хотел бы, чтобы haproxy использовал свою собственную страницу документа 503, когда сервер (бэкэнд) отправляет код HTTP 503. Является ли это возможным?

Видели что-то вроде «сбой монитора», но не знаете, как добавить его в интерфейс.

Ответы:


23

Вы можете использовать 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Директива может быть специфичной для внутреннего интерфейса , а также.

Параметр «errorfile» нельзя использовать для изменения ответа, отправляемого HAProxy, если узлы подключены. Этот параметр влияет только на HAProxy, когда все узлы отключены.

Важно понимать, что это ключевое слово предназначено не для перезаписи ошибок, возвращаемых сервером, а для ошибок, обнаруженных и возвращенных HAProxy. Вот почему список поддерживаемых ошибок ограничен небольшим набором.


2
Обратите внимание, что файл .http должен использоваться \r\nдля разрывов строк в заголовках, чтобы соответствовать спецификации протокола HTTP. Если вы загружаете из окна Windows, убедитесь, что вы используете binaryрежим передачи файлов s / ftp, чтобы пропустить преобразование разрывов строк Windows в разрывы строк \r\nв стиле Unix \n.
wqw

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 месяцев спустя).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.