Пaраметр upstream#

Параметр upstream доступен для использования в сервисе через объявление одним из следующих параметров (или их взаимосвязи):

Название

Обязательность

Описание

Возможные значения

Значение по умолчанию

use_main_upstream_groups

Обязательный

Использовать ли upstream_groups основного прокси (т.е. сервиса типа service_main_proxy). Параметр НЕ МОЖЕТ быть объявлен в сервисе типа service_main_proxy

true, false

—

upstream_groups

Обязательный

Группы upstream, на которые проксируются сообщения. Рекомендован к применению в случае, если проксирование осуществляется с использованием сервиса типа service_main_proxy, или при условии использования сервиса отличного от типа service_cache или service_main_proxy и значения false параметра use_main_upstream_groups

Последовательность параметров и их значения

—

upstream_groups.id

Обязательный

Идентификатор upstream группы. Может быть строкой, числом, или их комбинацией. В качестве разделителя слов необходимо использовать знак нижнее подчеркивание «_». Значение должно быть уникальным

Текстовое значение

—

upstream_groups.servers

Обязательный

Список node для upstream. Если в секции servers присутствует только один upstream, то параметры max_fails, fail_timeout и slow_start игнорируются и сервер никогда не считается недоступным

Последовательность параметров и их значения

—

upstream_groups.servers.service_id

Опциональный. Обязательно, если server is None

Идентификатор сервиса

Текстовое значение

—

upstream_groups.servers.service_type

Опциональный. Обязательно, если service_id is not None

Тип сервиса

Текстовое значение: service_main_proxy, service_http_proxy, service_http_kafka_proxy, service_http_mq_proxy, service_gost_proxy

—

upstream_groups.servers.server

Опциональный. Обязательно, если service_id is None

Имя сервера или ip-адрес с портом. Порт по умолчанию — 80

Строковое значение

—

upstream_groups.servers.weight

Опциональный

«Веса» сервера

Целочисленное значение

1

upstream_groups.servers.max_conns

Опциональный

Максимальное количество одновременных подключений к upstream. 0 — ограничений нет

Целочисленное значение

0

upstream_groups.servers.max_fails

Опциональный

Число неудачных попыток работы с сервером, которые должны произойти в течение времени, заданного параметром fail_timeout, чтобы сервер считался недоступным. Нулевое значение отключает учет попыток

Целочисленное значение

1

upstream_groups.servers.fail_timeout

Опциональный

1) Время, в течение которого должно произойти заданное число неудачных попыток для того, чтобы сервер считался недоступным. 2) Время, в течение которого сервер будет считаться недоступным

Текстовое значение с суффиксом: ms — миллисекунда, s — секунда, m — минута, h — час, d — день, w — неделя, M — месяц (30 дней), y — год (365 дней)

10s

upstream_groups.servers.backup

Опциональный

Имя сервера, который будет использоваться в качестве резервной копии. Если все базовые серверы станут недоступны, запросы будут перенаправлены сюда

true, false

—

upstream_groups.servers.slow_start

Опциональный

Время, в течение которого сервер восстанавливает свой «вес» с нуля до номинального значения, бывшем до этого в неработоспособном состоянии. Применимо, если указано более одного peer

Текстовое значение с суффиксом: s — секунда, m — минута, h — час, d — день, w — неделя, M — месяц (30 дней), y — год (365 дней)

—

upstream_groups.servers.hash

Опциональный

Хеш, который будет связан с узлом при выборе липкой балансировки. Используется, если load_balancing/type == 'sticky' и enable_dp_hash is None

Текстовое значение

—

upstream_groups.servers.enable_dp_hash

Опциональный

Необходимо ли генерировать хеш из «ip: port» по внутреннему алгоритму DP. Используется, если load_balancing/type == 'sticky' и hash is None

Текстовое значение: true, false

—

upstream_groups.ssl

Опциональный

Тип соединения с проксируемым сервером — http или https. Маппится на опцию proxy_pass. Без дальнейших настроек SSL/TLS позволит установить небезопасное соединение по HTTPS (без верификации сертификатов)

true, false

false (http)

upstream_groups.rewrite_uri

Опциональный

Позволяет произвести замену URL-адреса, который идет на backend. URI переопределяется целиком (с учетом аргументов)

—

—

upstream_groups.rewrite_uri.from

Обязательный (в рамках rewrite_uri)

Регулярное выражение, соответствующее URI

Строковое значение

—

upstream_groups.rewrite_uri.to

Обязательный (в рамках rewrite_uri)

Строка для замены URI, соответствующая регулярному выражению в параметре from. Допустимо использовать подстановки (\(1, \)2 и т.д.)

Строковое значение

—

upstream_groups.bind_context

Опциональный

Шаблон условия связывания контекста. Обязательно, если use_upstream_groups: true и bind_condition is None

Строковое значение

—

upstream_groups.bind_condition

Опциональный

Значение переменной, которая будет использоваться в качестве условия связывания с upstream группой. Если используется данный параметр и существует несколько upstream групп, то одна из них должна быть объявлена по умолчанию. Используется, если bind_context is None и upstream_bind_variable is not None

Строковое значение

—

upstream_groups.default

Опциональный

Данная группа upstream используется по умолчанию. Используется вместе с bind_condition. Значение должно быть уникальным. Используется, если bind_condition is not None

true, false

—

upstream_groups.health_check

Опциональный

Группа параметров для проверки работоспособности сервиса. Параметры описаны в разделе Параметр health_check

Группа параметров и их значения

—

upstream_groups.load_balancing

Опциональный

—

Группа параметров и их значения

—

upstream_groups.load_balancing.type

Опциональный

Тип балансировки

hash — соответствие клиента серверу определяется при помощи хэшированного значения «ключа»; ip_hash; sticky — привязывает запрос к конкретному upstream; persistence — аналог sticky с возможностью ограничения по времени жизни сессии; least_conn — запрос передается серверу с наименьшим числом активных соединений, с учетом весов

Round Robin

upstream_groups.load_balancing.hash_consistent

Опциональный

Механизм хеширования методом ketama. Используется, если type: hash

on, off

—

upstream_groups.load_balancing.hash_key

Опциональный

Отображение клиент-сервер основано на значении хэшированного ключа. Используется, если type: hash

Строковое значение

—

upstream_groups.load_balancing.name

Опциональный

Имя файла cookie, используемого для отслеживания upstream srv. Используется, если type: sticky или type: persistence

Строковое значение

<route>

upstream_groups.load_balancing.domain

Опциональный

Имя домена, в котором будет сохранен файл cookie. Используется, если type: sticky

Строковое значение

Обрабатывается браузером

upstream_groups.load_balancing.path

Опциональный

Путь, по которому будет сохранен файл cookie. Используется, если type: sticky

Строковое значение

Обрабатывается браузером

upstream_groups.load_balancing.expires

Опциональный

Срок действия файла cookie. Используется, если type: sticky

Текстовое значение с суффиксом: ms, s, m, h, d, w, M, y

Cookie действует на протяжении сессии

upstream_groups.load_balancing.hash

Опциональный

Механизм хеширования для кодирования upstream. Используется, если type: sticky и hmac is None

md5, sha1, index

md5

upstream_groups.load_balancing.hmac

Опциональный

Механизм хеширования для кодирования upstream с дополнительным параметром hmac_key. Используется, если type: sticky и hash is None

md5, sha1

—

upstream_groups.load_balancing.hmac_key

Опциональный

Ключ, используемый при хешировании механизмом hmac. Используется, если type: sticky и hmac is not None

Строковое значение

—

upstream_groups.load_balancing.no_fallback

Опциональный

Вкл./Откл. поведения nginx, возвращающего 502, если запрос приходит с файлом cookie, а соответствующий backend недоступен. Используется, если type: sticky

on, off

—

upstream_groups.load_balancing.secure

Опциональный

Вкл./откл. механизма безопасной передачи файлов cookie — только через https. Используется, если type: sticky

on, off

off

upstream_groups.load_balancing.httponly

Опциональный

Необходимо ли использовать файлы cookie, которые не могут быть пропущены через js. Используется, если type: sticky

on, off

off

upstream_groups.load_balancing.persistence_type

Опциональный

Тип персистентной балансировки. Используется, если type: persistence

insert_cookie — балансировщик добавляет сеансовый cookie в сеанс клиентов; session_based — балансировщик связывает пользовательский сеанс с конкретным сервером

—

upstream_groups.load_balancing.monitor_cookie

Опциональный

Cookie, устанавливаемая upstream в ответе в заголовке Set-Cookie. Если cookie пришли, выставляется имя сессии. Используется, если type: persistence или type: sticky

Строковое значение

—

upstream_groups.load_balancing.always_use_sticky

Опциональный

Если в upstream только один peer, а параметр не указан, то cookie создаваться не будут. Используется, если type: sticky

true, false

—

upstream_groups.load_balancing.timeout

Опциональный

Время истечения срока действия cookie. Используется, если type: persistence

Целочисленное значение

—

upstream_groups.load_balancing.reset_uri

Опциональный

При обращении к данному uri сессионная cookie будет удалена из запроса и peer будет перевыбран. Используется, если type: sticky и reset_uri_pattern is None

Текстовое значение

—

upstream_groups.load_balancing.reset_uri_pattern

Опциональный

Используется, если type: sticky и reset_uri is None

Текстовое значение

—

upstream_groups.load_balancing.reset_cookie

Опциональный

Сессионная cookie будет сброшена, если в запросе отсутствует cookie указанная в monitor_cookie. Используется, если type: sticky

true, false

false

upstream_groups.load_balancing.max_age

Опциональный

Количество секунд до истечения срока действия файла cookie. Нулевое или отрицательное число немедленно сбросит файл cookie. Используется, если type: sticky

Целочисленное значение

—

upstream_groups.load_balancing.tail

Опциональный

Постфикс для липкой cookie. Постфикс будет добавлен через разделитель tail_delimiter. Можно указать имя переменной через $, или значение из заголовков ответа

Текстовое значение

—

upstream_groups.load_balancing.tail_delimiter

Обязательный (если tail is not None)

Разделитель окончания файла cookie. Допускается только один символ

—

—

upstream_groups.zone

Опциональный

Зона разделяемой памяти, в которой хранятся конфигурация группы и ее рабочее состояние, разделяемые между рабочими процессами. По умолчанию все группы upstreams используют одну общую дефолтную зону с размером 1m

Группа параметров и их значения

—

upstream_groups.zone.name

Опциональный

Имя upstream_zone

Строковое значение

default_zone

upstream_groups.zone.size

Опциональный

Размер upstream_zone. Данного размера хватает на 512 серверов с включенным healthcheck & sticky session

Текстовое значение с суффиксом: k/K — килобайты, m/M — мегабайты

1m

keepalive_conn_count

Опциональный

Максимальное число неактивных постоянных соединений с серверами группы, которые будут сохраняться в кэше каждого рабочего процесса

Целочисленное значение

—

keepalive

Опциональный

Максимальное число неактивных постоянных соединений с серверами группы, которые будут сохраняться в кэше каждого рабочего процесса. При превышении этого числа наиболее давно не используемые соединения закрываются

Целочисленное значение

—

keepalive_requests

Опциональный

Максимальное число запросов, которые можно сделать по одному постоянному соединению. После достижения лимита соединение закрывается

Целочисленное значение

100

keepalive_timeout

Опциональный

Таймаут, в течение которого неактивное постоянное соединение с сервером группы не будет закрыто

Текстовое значение с суффиксом: s — миллисекунда, s — секунда, m — минута, h — час, d — день, w — неделя, M — месяц (30 дней), y — год (365 дней)

60s

upstream_group_id

Опциональный

Идентификатор upstream группы. Не может быть объявлен в сервисах типа service_main_proxy и service_cache

Текстовое значение

—

upstream_bind_variable

Опциональный

Переменная, которая используется для связывания upstream группы с bind_condition

Строковое значение

—

Пример использования параметра upstream:

version: 2.0.3
profile: <profile_name>
system:
  wrk_count: 4
  conn_count: 2048
  optional:
    wrk_user: sowactl
    underscores_in_headers: true
    log_level: debug
service:
  service_main_proxy:
    - id: 1
      listen:
        - port: 8091
          
      hostname:
        - localhost
      url: /
      
      upstream_groups:
        - id: extgw_v1
          ssl: true
          health_check:
            
          load_balancing:
            
          servers:
            
      
  service_http_proxy:
    - id: payments_1
      
      url: ^\/payments\/v4\/banking\/products\/p2bpayments\/mobile-main\/main$
      
      use_main_upstream_groups: true
      upstream_group_id: extgw_v1
      
    - id: hp_1
      
      use_main_upstream_groups: false
      upstream_group_id: <value_name_group>
      upstream_groups:
        - id: <value_name_group>
          servers:
            - server: <value_ip_address>