Varnish — кеширование, когда куки/сессии передаются в циклическом директоре

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

Коротко о моей конфигурации:

server0 - лак, be1 - апач, be2 - апач

лак извлекается из 2 бэкендов по кругу.

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

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

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


person floodpants    schedule 20.07.2011    source источник


Ответы (1)


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

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

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

person ivy    schedule 20.07.2011
comment
Большое спасибо :) Я бы проголосовал за вас, но мне нужно 15 представителей. Это дало мне действительно хорошую отправную точку. - person floodpants; 21.07.2011