Модуль ngx_http_upstream_hc_module Join us for the first quarterly NGINX Community Call on July 22nd to connect and discuss NGINX development. english русский новости [en] об nginx скачать безопасность [en] документация faq книги [en] сообщество компания x.com blog njs ingress controller gateway fabric Модуль ngx_http_upstream_hc_moduleПример конфигурации Директивы health_check match Модуль ngx_http_upstream_hc_module позволяет активировать периодические проверки работоспособности серверов в группе, указанной в содержащем location. Группа должна находиться в зоне разделяемой памяти. Если проверка работоспособности была неуспешной, то сервер признаётся неработоспособным. Если для группы задано несколько проверок, то при любой неуспешной проверке соответствующий сервер будет считаться неработоспособным. На неработоспособные серверы и серверы в состоянии “checking” клиентские запросы передаваться не будут. Обратите внимание, что при использовании проверок большинство переменных имеют пустые значения. Модуль доступен как часть коммерческой подписки. Пример конфигурации 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; } } Каждому серверу группы backend с интервалом в 5 секунд посылаются запросы “/”. Если происходит ошибка или таймаут при работе с сервером, или код ответа проксируемого сервера не равен 2xx или 3xx, проверка считается неуспешной и сервер признаётся неработоспособным. Проверки работоспособности могут тестировать код ответа, наличие или отсутствие определённых полей заголовка и их значений, а также содержимое тела ответа. Тесты настраиваются отдельно при помощи директивы match и указываются в параметре match. Например: 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, тип содержимого “text/html” и “Welcome to nginx!” в теле ответа. Директивы Синтаксис: health_check [параметры]; Умолчание: — Контекст: location Активирует периодические проверки работоспособности серверов в группе, указанной в содержащем location. Могут быть заданы следующие необязательные параметры: interval=время задаёт интервал между двумя последовательными проверками, по умолчанию 5 секунд. jitter=время задаёт время, в пределах которого случайным образом задерживается каждая проверка, по умолчанию задержки нет. fails=число задаёт число последовательных неуспешных проверок для определённого сервера, после которых сервер будет считаться неработоспособным, по умолчанию 1. passes=число задаёт число последовательных успешных проверок для определённого сервера, после которых сервер будет считаться работоспособным, по умолчанию 1. uri=uri задаёт URI, используемый в запросах, проверяющих работоспособность, по умолчанию “/”. mandatory [persistent] устанавливает исходное состояние “checking” для сервера до завершения первой проверки работоспособности (1.11.7). На серверы в состоянии “checking” клиентские запросы передаваться не будут. Если параметр не указан, то исходно сервер будет считаться работоспособным. Параметр persistent (1.19.7) устанавливает исходное состояние “up” для сервера после перезагрузки nginx в случае, если до перезагрузки сервер считался работоспособным. match=имя указывает на блок match с условиями, которым должен удовлетворять ответ, чтобы результат проверки считался успешным. По умолчанию код ответа должен быть 2xx или 3xx. port=число задаёт порт, используемый при подключении к серверу для проверки его работоспособности (1.9.7). По умолчанию совпадает с портом сервера. type=grpc [grpc_service=имя] [grpc_status=код] активирует периодические проверки работоспособности gRPC-сервера или службы gRPC, указанной при помощи необязательного параметра grpc_service (1.19.5). Если сервер не поддерживает протокол проверки работоспособности gRPC, то можно использовать необязательный параметр grpc_status для указания статуса (например статус “12” / “UNIMPLEMENTED”) при получении которого сервер признаётся работоспособным: health_check mandatory type=grpc grpc_status=12; Параметр type=grpc должен быть указан после остальных параметров директивы, grpc_service и grpc_status должны быть указаны после type=grpc. Параметр несовместим с параметрами uri и match. keepalive_time=время включает keepalive соединения в проверках работоспособности и задаёт время, в течение которого могут обрабатываться запросы в рамках keepalive соединения (1.21.7). По умолчанию keepalive соединения выключены. Синтаксис: match имя { ... } Умолчание: — Контекст: 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 $переменная ...; все указанные переменные непустые и не равны “0” (1.15.9). Если задано несколько тестов, то ответ должен удовлетворять всем тестам. Проверяются только первые 256 Кбайт тела ответа. Примеры: # код ответа 200, тип содержимого "text/html" # и тело ответа содержит "Welcome to nginx!" match welcome { status 200; header Content-Type = text/html; body ~ "Welcome to nginx!"; } # код ответа не равен 301, 302, 303 и 307 и заголовок не содержит "Refresh:" match not_redirect { status ! 301-303 307; header ! Refresh; } # код ответа успешный и сервер не в сервисном режиме match server_ok { status 200-399; body !~ "maintenance mode"; } # код ответа равен 200 или 204 map $upstream_status $good_status { 200 1; 204 1; } match server_ok { require $good_status; }