Varnish - кэш, когда файлы cookie / сеансы предоставляются в директории Round Robin - PullRequest
0 голосов
/ 20 июля 2011

Я впервые настраиваю лак и столкнулся с проблемой, на которую пока не нашел полного ответа.

Мой конфиг в двух словах:

server0 - лак, be1 - apache, be2 ​​- apache

Лак тянет с 2-х бэкэндов в круговой малиновке.

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

Мне удалось заставить эту половину работать. Он передает информацию о сеансе из того, что я вижу, но здесь есть проблема - информация, возвращаемая из серверной части, специфична для серверной части, на которой она была сгенерирована. Таким образом, возвращаемое время будет зависеть от того, был ли be1 или be2 вызван для последнего кэша.

Есть ли способ заставить это работать так, чтобы переменная сеанса была одинаковой независимо от того, какой бэкэнд ее обрабатывает?

1 Ответ

6 голосов
/ 21 июля 2011

Это общая проблема с сессиями;cookie (отправляется с каждым запросом) содержит идентификатор для сеанса.Реальные данные сеанса хранятся на сервере или в базе данных.Для этого есть несколько решений, например:

  1. Липкие сессии;установите дополнительную переменную cookie (например, be = 1 или be = 2) или сделайте идентификатор сеанса узнаваемо принадлежащим бэкенду 1 или 2. Затем Varnish может решить, к какому бэкэнд-серверу должен обратиться запрос.Если бэкэнд выходит из строя, ваш сеанс теряется (без «сбоя сеанса»)
  2. Сохранение данных сеанса в базе данных, memcached или другом хранилище данных, совместно используемом всеми бэкэндами
  3. Don 't использовать сеансы, но сериализовать все ваши данные в куки.Поскольку клиенты ненадежны (файлы cookie могут быть изменены клиентом), убедитесь, что данные не повреждены, например, подпишите свои данные

Найдите какой-нибудь библиотечный / повторно используемый код, который вы можете применить для своего кода, иудачи!

...