Модуль ngx_http_upstream_hc_module
Модуль 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