Я хотел бы, чтобы haproxy использовал свою собственную страницу документа 503, когда задний сервер (бэкэнд) отправляет код HTTP 503. Является ли это возможным?
Видели что-то вроде условий «сбой монитора», но не знаю, как добавить это в интерфейс.
Вы можете использовать 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. Поэтому список поддерживаемых ошибок ограничен небольшим набором.
Ты можешь сделать что-нибудь грязное. Вы можете заблокировать ответы 503, что приведет к возврату настраиваемой ошибки 502, для которой вы можете создать страницу ошибки. Однако имейте в виду, что по любой причине, по которой haproxy должен вернуть 502 (неверный ответ), вернет то же самое.
По сути, это так же просто, как "rspdeny ^ HTTP / 1.1 503" в сочетании с "errorfile 502".
У нас есть часть нашего веб-сайта, работающая в устаревшей системе, и в итоге я использовал следующее:
errorfile 502 /etc/haproxy/errors/502.http
acl is_internal_error status ge 500
rspideny . if is_internal_error
Надеюсь, это поможет (даже если это произойдет через 8 месяцев).