Кэширование защищенных паролем данных с использованием Varnish - PullRequest
0 голосов
/ 15 марта 2012

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

Вот псевдокод того, что делает мой бэкэнд:

if (authenticated(cookie)) 
{
    if (stale)
    {
        regenerate_and_send()
    }
    else
    {
         not_modified()
    }
}
else
{
     access_denied()
}

Итак, я имею в виду, что Varnish выполняет проверки (условные GET) и серверная часть отвечает HTTP-статусами «Не изменено», «Доступ запрещен» или «200 OK» (регенерация ресурса в последнем случае, конечно)

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

Как я могу это сделать?

Легко провести проверку и написать логику бэкэнда. Как мне работать с файлами cookie в Varnish, чтобы они не влияли на кэширование, а передавались на сервер?

1 Ответ

1 голос
/ 16 марта 2012

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

Если я правильно понимаю ваш вопрос, рассматриваемый ресурс можетобслуживать всех привилегированных пользователей.История здесь;У каждого пользователя свой сеансовый файл cookie, и у лака нет возможности узнать, какой сеансовый файл cookie имеет права администратора.Вы можете сделать (как минимум) две вещи:

  1. Установить cookie 'admin = yourmagicstringhere', если пользователь получает права администратора.Сделайте Varnish способным проверить правильность магической строки и выполните поиск / выборку для запроса соответственно для ресурса.Это имеет некоторые недостатки безопасности, но работает.
  2. Всегда пересылать запрос на сервер (не нужно искать / сохранять в кеше), сервер генерируетзапрос, если пользователь имеет права администратора, который решен.В качестве альтернативы ESI вы можете сделать так, чтобы бэкэнд сгенерировал какой-то другой ответ OK и сделал перезапуск, в котором вы можете выполнить поиск / выборку / доставку.
...