Upstream Probe#
Реализует активные проверки работоспособности (health probes)
для Upstream. Добавлено в версии 1.4.0: PRO По умолчанию — server Задает активную проверку работоспособности серверов апстрима, указанного в директиве proxy_pass в том же
контексте Сервер проходит проверку, если запрос к нему успешно выполняется с учетом
всех параметров самой директивы Чтобы использовать проверки,
в апстриме необходима зона разделяемой памяти (zone).
Для одного апстрима можно определить несколько проверок. Могут быть заданы следующие параметры: Обязательное имя проверки. Альтернативный порт для запроса. Интервал между проверками. Проверяемое при запросе условие; задается строкой из переменных.
Если результат подстановки всех переменных — Если параметр задан, то изначально состояние сервера подлежит уточнению
и клиентские запросы не передаются ему, пока проверка не будет пройдена. Установка этого параметра требует сначала включить Число последовательных неуспешных запросов,
при котором проверка считает сервер неработающим. Число последовательных успешных запросов,
при котором проверка считает сервер работающим. Максимальный объем памяти для ответа. Если задано нулевое
значение, ожидание ответа отключается. Режим проверки в зависимости от работоспособности серверов: По умолчанию — Если параметр указан, используется протокол UDP.
По умолчанию для проверок используется TCP. Отправляемые для проверки данные;
это может быть строка с префиксом Пример: Детали работы: Изначально сервер не получает клиентские запросы,
пока не пройдет все заданные для него проверки с параметром Сервер считается неработающим и не получает клиентские запросы,
если какая-либо заданная для него проверка достигает своего порога Чтобы неработающий сервер снова мог считаться работающим,
все заданные для него проверки должны достичь своего порога Модуль Имя активной сейчас проверки upstream_probe. Содержимое ответа,
полученного в ходе активной проверки upstream_probe.Пример конфигурации#
server {
listen ...;
# ...
proxy_pass backend;
upstream_probe_timeout 1s;
upstream_probe backend_probe
port=12345
interval=5s
test=$good
essential
fails=3
passes=3
max_response=512k
mode=onfail
"send=data:GET / HTTP/1.0\n\n";
}
Директивы#
upstream_probe (PRO)#
upstream_probe
имя [port=
число] [interval=
время] [test=
условие] [essential
[persistent
]] [fails=
число] [passes=
число] [max_response=
размер] [mode=
always
| idle
| onfail
] [udp
] [send=
строка];server
, где находится директива upstream_probe
.upstream_probe
и всех параметров,
влияющих на использование апстримов тем контекстом server
, где она
задана, в том числе директивы proxy_next_upstream.имя
port
interval
По умолчанию — 5s
.test
""
или "0"
,
проверка не пройдена.essential
persistent
essential
;
серверы с persistent
, работавшие до
перезагрузки конфигурации,
начинают получать запросы без необходимости сначала пройти эту проверку.fails
По умолчанию — 1.passes
По умолчанию — 1.max_response
По умолчанию — 256k
.mode
always
— серверы проверяются независимо от состояния;idle
— проверяются неработающие серверы, а также серверы,
где с последнего клиентского запроса прошло время interval
.onfail
— проверяются серверы только в неработающем состоянии.always
.udp
send
data:
или имя файла с данными
(задается абсолютно или относительно каталога /usr/local/angie/
).upstream backend {
zone backend 1m;
server a.example.com;
server b.example.com;
}
map $upstream_probe_response $good {
~200 "1";
default "";
}
server {
listen ...;
# ...
proxy_pass backend;
upstream_probe_timeout 1s;
upstream_probe backend_probe
port=12345
interval=5s
test=$good
essential
persistent
fails=3
passes=3
max_response=512k
mode=onfail
"send=data:GET / HTTP/1.0\n\n";
}
essential
(пропуская помеченные как persistent
, если конфигурация перезагружена
и до этого сервер считался работающим).
Если таких проверок нет, сервер считается работающим.fails
или сам сервер достигает порога max_fails.passes
;
после этого учитывается порог max_fails.Встроенные переменные#
stream_upstream
поддерживает следующие встроенные переменные:$upstream_probe
(PRO)#$upstream_probe_response
(PRO)#