INTEGRITY Документация

Привязка сессии

Когда вы включаете привязку сессии, ваш балансировщик нагрузки направляет все запросы конкретного пользователя на одну и ту же конечную точку. Такая непрерывность сохраняет данные сессии пользователя, например товары в корзине, которые иначе могли бы быть потеряны при распределении запросов между несколькими серверами.

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

Типы

Привязка сессий задаёт тип привязки, который должен использовать балансировщик нагрузки, если не указано значение "none" или "" (по умолчанию).

При первом запросе к проксируемому балансировщику нагрузки создаётся cookie, в котором закодирована информация о том, на какую конечную точку будет перенаправлен запрос. Последующие запросы того же клиента к тому же балансировщику нагрузки будут направляться на конечную точку, указанную в cookie, пока действует срок его жизни и пока эта конечная точка остаётся работоспособной. Если срок действия cookie истёк или конечная точка стала неработоспособной, вычисляется и используется новая конечная точка.

Как это работает?

Привязка сессий автоматически направляет запросы от одного клиента к одной и той же конечной точке:

  1. Когда клиент отправляет первый запрос, Cloudflare устанавливает cookie __cflb cookie-файл на клиенте (для отслеживания связанной конечной точки).
  2. Последующие запросы от того же клиента направляются на эту конечную точку в течение срока действия cookie, пока она остается работоспособной.
  3. Если срок действия cookie истекает или конечная точка становится нерабочей, Cloudflare устанавливает новый cookie, отслеживающий новую конечную точку, на которую произошло переключение при сбое.
    flowchart LR
      accTitle: Session affinity process
      accDescr: Session affinity directs requests from the same client to the same server.
     A[Client] --Request--> B{<code>__cflb</code> cookie set?}
     B -->|Yes| C[Route to previous endpoint]
     C --> O2
     B ---->|No| E[Follow normal routing]
     E --> O2
     E --Set <code>__cflb</code> cookie--> A
     subgraph P1 [Pool 1]
        O1[Endpoint 1]
        O2[Endpoint 2]
     end

По умолчанию сессии на основе cookie длятся 23 часа, если вы не задали особую продолжительность сессии Время жизни (TTL).

Cookie-файл сеанса является защищённым, если Always Use HTTPS включён. Кроме того, для cookie всегда включён HttpOnly, чтобы предотвратить атаки межсайтового скриптинга.

Это работает аналогично cookie с той разницей, что первоначальный выбор конечной точки стабилен и основан на IP-адресе клиента.

По заголовку HTTP

При первом запросе к проксируемому балансировщику нагрузки создаётся ключ сессии на основе настроенных HTTP заголовков. Этот ключ кодирует заголовки запроса, которые используются для хранения информации о том, на какую конечную точку будет направлен запрос в течение состояния сессии балансировщика нагрузки. Последующие запросы к балансировщику нагрузки с теми же заголовками будут направляться на ту же конечную точку в течение сессии, пока эта точка остаётся работоспособной. Если сессия оставалась неактивной в течение времени, заданного в session affinity TTL seconds, или конечная точка стала неработоспособной, вычисляется и используется новая конечная точка.

Управляйте тем, как используются заголовки

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

Если вы хотите, чтобы сессии создавались только при наличии в запросах всех настроенных HTTP-заголовков, задайте session_affinity_attributes.require_all_headers к true через Cloudflare API или переключить Require all headers к enabled в панели управления Cloudflare при редактировании балансировщика нагрузки.


Включение привязки сессии в панели управления Cloudflare

Включите привязку сессии, если вам создать или отредактировать балансировщик нагрузки, во время Имя хоста шаг.

Если вы включите Session Affinity, выберите один из следующих вариантов:


Включение привязки сессии через API Cloudflare

Привязка сессий представляет собой свойство балансировщиков нагрузки. Задать её можно с помощью следующих конечных точек:

Настройте поведение привязки сессии с помощью session_affinity, session_affinity_ttl, а также session_affinity_attributes параметры.

Чтобы включить привязку сеанса по заголовку HTTP, задайте session_affinity значение на header и добавьте названия ваших HTTP-заголовков в session_affinity_attributes.headers.

Подробнее о командах API в контексте их использования см. в Создание балансировщика нагрузки с помощью API.


Дренирование эндпоинта

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

Zero-Downtime Failover

Zero-Downtime Failover автоматически направляет трафик на конечные точки внутри пула при временных сетевых сбоях. Это помогает снизить количество ошибок, которые видят ваши пользователи, если проблема возникает в промежутке между активными проверками работоспособности.

Вы можете включить один из трех вариантов: