Upstream Probe#
Реализует активные проверки работоспособности (health probes)
для Upstream. Примечание Согласно спецификации RFC 2616 (HTTP/1.1) и RFC 9110 (HTTP Semantics),
заголовки HTTP должны разделяться последовательностью CRLF ( Добавлено в версии 1.4.0: PRO По умолчанию — server Задает активную проверку работоспособности серверов апстрима, указанного в директиве proxy_pass в том же
контексте Сервер проходит проверку, если запрос к нему успешно выполняется с учетом
всех параметров самой директивы Чтобы использовать проверки,
в апстриме необходима зона разделяемой памяти (zone).
Для одного апстрима можно определить несколько проверок. Могут быть заданы следующие параметры: Обязательное имя проверки. Альтернативный порт для запроса. Интервал между проверками.
По умолчанию — Проверяемое при запросе условие; задается строкой из переменных.
Если результат подстановки всех переменных — Если параметр задан, то изначально состояние сервера подлежит уточнению
и клиентские запросы не передаются ему, пока проверка не будет пройдена. Установка этого параметра требует сначала включить Число последовательных неуспешных запросов,
при котором проверка считает сервер неработающим.
По умолчанию — 1. Число последовательных успешных запросов,
при котором проверка считает сервер работающим.
По умолчанию — 1. Максимальный объем памяти для ответа. Если задано нулевое
значение, ожидание ответа отключается.
По умолчанию — Режим проверки в зависимости от работоспособности серверов: По умолчанию — Если параметр указан, используется протокол 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\r\n\r\n";
}
rn
), а
не просто 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
passes
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\r\n\r\n";
}
essential
(пропуская помеченные как persistent
, если конфигурация перезагружена
и до этого сервер считался работающим).
Если таких проверок нет, сервер считается работающим.fails
или сам сервер достигает порога max_fails.passes
;
после этого учитывается порог max_fails.Встроенные переменные#
stream_upstream
поддерживает следующие встроенные переменные:$upstream_probe
(PRO)#$upstream_probe_response
(PRO)#