Согласно документации errorfile :
<file> designates a file containing the full HTTP response. It is
recommended to follow the common practice of appending ".http" to
the filename so that people do not confuse the response with HTML
error pages, and to use absolute paths, since files are read
before any chroot is performed.
Итак, файл должен содержать полный HTTP-ответ , но вы пытаетесь отправить JSON only.
В документации также сказано, что:
For better HTTP compliance, it is
recommended that all header lines end with CR-LF and not LF alone.
В примере конфигурации, например,
errorfile 503 /etc/haproxy/errorfiles/503sorry.http
, показана распространенная практика расширения .http
для файл ошибок.
Примеры некоторых файлов ошибок по умолчанию здесь .
Пример ( 504.http ):
HTTP/1.0 504 Gateway Time-out
Cache-Control: no-cache
Connection: close
Content-Type: text/html
<html><body><h1>504 Gateway Time-out</h1>
The server didn't respond in time.
</body></html>
Итак, в вашем сценарии 504.http
будет выглядеть следующим образом:
HTTP/1.0 504 Gateway Time-out
Cache-Control: no-cache
Connection: close
Content-Type: application/json
{
"message": "Gateway Timeout"
}
Кроме того, вам нужно ограничить размер файла, то есть BUFSIZE
(8 или 16 КБ), как описано в документации.
Могут быть некоторые журналы ошибок для не обслуживания вашего файла JSON. Возможно, вы захотите еще раз тщательно просмотреть журналы HAProxy. Просто чтобы быть уверенным.