Session Persistence

Содержание

Обзор

Модуль "Session Persistence" позволяет пересылать запросы одной и той же сессии на один и тот же сервер. Он работает совместно с модулем балансировки нагрузки. При получении нового запроса модуль балансировки нагрузки пересылает его на сервер А и устанавливает сессию. После получения следующего запроса этой сессии модуль перенаправит его напрямую на сервер А.

Модуль предоставляет способы маркировки сессий:

  • Добавление сессионных cookie;
  • Мониторинг существующих сессионных cookie в HTTP запросах;
  • Механизм сессий.

Директивы

persistence

Синтаксис persistence mode [cookie_name=name] [monitor_cookie=name] [timeout=timeout];
Контекст upstream

Включает сохранение сессии. Поддерживается два persistence mode: insert_cookie (добавление cookie) и session_based. Добавление cookie имеет два подрежима: непосредственная вставка cookie и добавление cookie на основе мониторинга существующих cookie. Таймаут указывается в минутах.

Пример:

Добавить cookie:

upstream pool1 {
        persistence insert_cookie cookie_name=senginxforward timeout=30;
        server 192.168.1.101;
        server 192.168.1.102;
}


Слушать существующие сессионные cookie:

upstream pool2 {
        least_conn;
        persistence insert_cookie cookie_name=senginxforward monitor_cookie=JSESSIONID timeout=30;
        server 192.168.1.101;
        server 192.168.1.102;
}


Механизм сессий (Начиная с версии 1.5.7):

upstream pool2 {
        least_conn;
        persistence session_based;
        server 192.168.1.101;
        server 192.168.1.102;
}

server {
    session on;
    ... ...
    proxy_pass http://pool2;
}


Реализация

Добавление cookie

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

Мониторинг сессионных cookie

Если сервер уже установил cookie для идентификации сессии, модуль будет отслеживать cookie для обеспечения функциональности сохранения сессии.

Механизм сессий

SEnginx открывает и поддерживает сессию.