HAProxy 1.5 - Обслуживание файла c json при ошибке 504 - PullRequest
2 голосов
/ 28 апреля 2020

Я пытаюсь настроить HAProxy для сервера файл stati c JSON на 504 ошибки. Чтобы проверить, мы настроили файл конфигурации на тайм-аут через 10 секунд и использовали опцию errorfile:

defaults
  log     global
  mode    http
  retries 3
  timeout client 10s
  timeout connect 10s
  timeout server 10s
  option tcplog
  balance  roundrobin

frontend https
  maxconn 2000
  bind 0.0.0.0:9000

  errorfile 504 /home/user1/test/error.json

  acl employee-api-service path_reg /employee/api.*
  use_backend servers-employee-api if employee-api-service

backend servers-employee-api
  server www.server.com 127.0.0.1:8000

По сути, я пытаюсь подать JSON вместо HTML по тайм-ауту, поэтому бэкэнд-сервис может завершиться неудачно. Однако при тестировании мы не смогли ничего получить, ни HTML, ни JSON. Посмотрев на ответ, он просто говорит, что потерпел неудачу, без кода состояния. Правильно ли мои настройки для errorfile? Поддерживает ли это HAProxy 1.5?

1 Ответ

3 голосов
/ 01 мая 2020

Согласно документации 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. Просто чтобы быть уверенным.

...