Spec-Zone.ru › nginx

Модуль ngx_http_upstream_hc_module

  • Пример конфигурации
  • Директивы
  • health_check
  • match

Модуль ngx_http_upstream_hc_module позволяет включить периодические проверки работоспособности серверов в группе, указанной в окружающем расположении. Группа серверов должна храниться в общий памяти.

Если проверка работоспособности завершается неудачно, сервер считается неработоспособным. Если для одной и той же группы серверов определены несколько проверок работоспособности, одна неудача в любой проверке сделает соответствующий сервер неработоспособным. Запросы клиентов не передаются на неработоспособные серверы и серверы в состоянии «проверка».

Обратите внимание, что большинство переменных будут иметь пустые значения при использовании с проверками работоспособности.
Этот модуль доступен как часть нашей коммерческой подписки.

Пример конфигурации

upstream dynamic {
    zone upstream_dynamic 64k;

    server backend1.example.com      weight=5;
    server backend2.example.com:8080 fail_timeout=5s slow_start=30s;
    server 192.0.2.1                 max_fails=3;

    server backup1.example.com:8080  backup;
    server backup2.example.com:8080  backup;
}

server {
    location / {
        proxy_pass http://dynamic;
        health_check;
    }
}

С этой конфигурацией nginx будет отправлять запросы «/» каждому серверу в группе backend каждые пять секунд. Если произойдет какая-либо ошибка связи, истечение времени ожидания или прокси-сервер ответит кодом состояния, отличным от 2xx или 3xx, проверка работоспособности завершится неудачно, и сервер будет считаться неработоспособным.

Проверки работоспособности могут быть настроены для проверки кода состояния ответа, наличия определённых полей заголовков и их значений, а также содержимого тела. Тесты настраиваются отдельно с помощью директивы match и ссылаются в параметре match директивы health_check:

http {
    server {
    ...
        location / {
            proxy_pass http://backend;
            health_check match=welcome;
        }
    }

    match welcome {
        status 200;
        header Content-Type = text/html;
        body ~ "Welcome to nginx!";
    }
}

Эта конфигурация показывает, что для успешной проверки работоспособности ответ на запрос проверки должен быть успешным, иметь код состояния 200 и содержать «Welcome to nginx!» в теле.

Директивы

Синтаксис: health_check [parameters];
По умолчанию: —
Контекст: location

Включает периодические проверки работоспособности серверов в группе, указанной в окружающем расположении.

Поддерживаются следующие необязательные параметры:

interval=time
устанавливает интервал между двумя последовательными проверками работоспособности, по умолчанию 5 секунд.
jitter=time
устанавливает время, в течение которого каждая проверка работоспособности будет случайным образом отложена, по умолчанию задержки нет.
fails=number
устанавливает количество последовательных неудачных проверок работоспособности определенного сервера, после чего этот сервер будет считаться неработоспособным, по умолчанию 1.
passes=number
устанавливает количество последовательных успешных проверок работоспособности определенного сервера, после чего сервер будет считаться работоспособным, по умолчанию 1.
uri=uri
определяет URI, используемый в запросах проверки работоспособности, по умолчанию «/».
mandatory [persistent]

устанавливает начальное состояние «проверка» для сервера до завершения первой проверки работоспособности (1.11.7). Запросы клиентов не передаются на серверы в состоянии «проверка». Если параметр не указан, сервер изначально считается работоспособным.

Параметр persistent (1.19.7) устанавливает начальное состояние «вкл.» для сервера после перезагрузки, если сервер был работоспособным до перезагрузки.

match=name
указывает блок match, настраивающий тесты, которые должен пройти ответ, чтобы проверка работоспособности прошла успешно. По умолчанию код состояния ответа должен быть 2xx или 3xx.
port=number
определяет порт, используемый при подключении к серверу для выполнения проверки работоспособности (1.9.7). По умолчанию равен порту сервера.
type=grpc [grpc_service=name] [grpc_status=code]
включает периодические проверки работоспособности gRPC-сервера или определенной gRPC-службы, указанной с необязательным параметром grpc_service (1.19.5). Если сервер не поддерживает протокол gRPC Health Checking Protocol, необязательный параметр grpc_status может быть использован для указания ненулевого gRPC статуса (например, код состояния «12» / «UNIMPLEMENTED»), который будет рассматриваться как работоспособный:
health_check mandatory type=grpc grpc_status=12;
Параметр type=grpc должен быть указан после всех других параметров директивы, grpc_service и grpc_status должны следовать за type=grpc. Параметр несовместим с параметрами uri или match.
keepalive_time=time
включает keepalive подключения для проверок работоспособности и определяет время, в течение которого запросы могут обрабатываться через одно keepalive-соединение (1.21.7). По умолчанию keepalive-соединения отключены.
Синтаксис: match name { ... }
По умолчанию: —
Контекст: http

Определяет набор тестов, используемый для проверки ответов на запросы проверки работоспособности.

Следующие элементы могут быть проверены в ответе:

status 200;
статус равен 200
status ! 500;
статус не равен 500
status 200 204;
статус равен 200 или 204
status ! 301 302;
статус не равен 301 и 302
status 200-399;
статус находится в диапазоне от 200 до 399
status ! 400-599;
статус не находится в диапазоне от 400 до 599
status 301-303 307;
статус равен 301, 302, 303 или 307
header Content-Type = text/html;
заголовок содержит «Content-Type» со значением text/html
header Content-Type != text/html;
заголовок содержит «Content-Type» со значением, отличным от text/html
header Connection ~ close;
заголовок содержит «Connection» со значением, соответствующим регулярному выражению close
header Connection !~ close;
заголовок содержит «Connection» со значением, не соответствующим регулярному выражению close
header Host;
заголовок содержит «Host»
header ! X-Accel-Redirect;
заголовок отсутствует «X-Accel-Redirect»
body ~ "Welcome to nginx!";
тело соответствует регулярному выражению «Welcome to nginx!»
body !~ "Welcome to nginx!";
тело не соответствует регулярному выражению «Welcome to nginx!»
require $variable ...;
все указанные переменные не пустые и не равны «0» (1.15.9).

Если указано несколько тестов, ответ соответствует только в том случае, если он соответствует всем тестам.

Только первые 256 Кб тела ответа проверяются.

Примеры:

# status is 200, content type is "text/html",
# and body contains "Welcome to nginx!"
match welcome {
    status 200;
    header Content-Type = text/html;
    body ~ "Welcome to nginx!";
}
# status is not one of 301, 302, 303, or 307, and header does not have "Refresh:"
match not_redirect {
    status ! 301-303 307;
    header ! Refresh;
}
# status ok and not in maintenance mode
match server_ok {
    status 200-399;
    body !~ "maintenance mode";
}
# status is 200 or 204
map $upstream_status $good_status {
    200 1;
    204 1;
}

match server_ok {
    require $good_status;
}

© 2002-2021 Igor Sysoev
© 2011-2024 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/http/ngx_http_upstream_hc_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API