Upstream Probe#

Реализует активные проверки работоспособности (health probes) для Upstream.

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

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";
}

Примечание

Согласно спецификации RFC 2616 (HTTP/1.1) и RFC 9110 (HTTP Semantics), заголовки HTTP должны разделяться последовательностью CRLF (\r\n), а не просто \n.

Директивы#

upstream_probe#

Задает активную проверку работоспособности серверов апстрима, указанного в директиве proxy_pass в том же контексте server, где находится директива upstream_probe.

Сервер проходит проверку, если запрос к нему успешно выполняется с учетом всех параметров самой директивы upstream_probe и всех параметров, влияющих на использование апстримов тем контекстом server, где она задана, в том числе директивы proxy_next_upstream.

Чтобы использовать проверки, в апстриме необходима зона разделяемой памяти (zone). Для одного апстрима можно определить несколько проверок.

Могут быть заданы следующие параметры:

Пример:

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.

upstream_probe_timeout#

Синтаксис

upstream_probe_timeout время;

По умолчанию

upstream_probe_timeout 50s;

Контекст

server

Задает максимальное время бездействия установленного с сервером соединения для проверок, настроенных с помощью директивы upstream_probe (PRO); при превышении этого предела соединение будет закрыто.

Встроенные переменные#

Модуль stream_upstream поддерживает следующие встроенные переменные:

$upstream_probe#

Имя активной сейчас проверки upstream_probe.

$upstream_probe_response#

Содержимое ответа, полученного в ходе активной проверки upstream_probe.