Конфигурирование лака 4 VCL для кэширования только определенной страницы для анонимных пользователей (с Django)

Я использую Django с Лаком 4.

Я пытаюсь достигнуть этого:

  • Если запрос не для домашней страницы, передача (я пытаюсь, только кэшируют домашнюю страницу в данный момент для тестирования его, и т.д.),
  • Если cookie 'sessionid' присутствует, передайте или кэш для каждого сессии
  • Что-нибудь еще: передача

Вот конфигурация sub vcl_recv:

# cache only home page
    if (! req.url == "/") {
            return(pass);
    }

    # not caching if cookie sessionid is present
    if (req.http.Cookie ~ "sessionid") {
            return(pass);
    }

    unset req.http.cookie;

До сих пор Лак, кажется, всегда генерирует новую страницу для каждого это при вызове домашней страницы как анонимной. Я могу сказать, что использование Лака заголовков отправляет ('возраст' всегда 0, и 'X-лак' всегда является другим числом).

Это или что моя конфигурация пропускает что-то или является этим, потому что Django отправляет, 'Варьируйтесь: Cookie' в ответе? Если имеет место, как я могу 'скрыть' cookie от Лака в этом случае (только для анонимных пользователей)?

2
задан 15 October 2015 в 23:25
1 ответ

«Проблема» заключалась в том, что Django все время отправлял заголовок «Vary: Cookie» . Я думаю, это из-за плагина auth, но я не исследовал это, я просто удалил заголовок, когда ответ пришел с сервера.

Вот что в документе Varnish говорится о 'varnish: cookie':

Другой пример неправильного использования - использование только Vary: Cookie для дифференцировать ответ. Опять же, может быть очень большое количество куки и, следовательно, очень большое количество кешированных объектов, которые будут извлечены, скорее всего, только их исходными запросчиками.

Источник: https://www.varnish-software.com/book/4.0/chapters/HTTP.html#vary

Вот что мой VCL config выглядит так (я удалил верхнюю часть, которая представляет собой просто конфигурацию сервера):

sub vcl_recv
{
        # caching only home page
        if (! req.url == "/") {
                return(pass);
        }

        # not caching if cookie sessionid present
        if (req.http.Cookie ~ "sessionid") {
                return(pass);
        }

        unset req.http.cookie;

}

sub vcl_backend_response
{

        if (bereq.url == "/") {
                unset beresp.http.Vary;
                return(deliver);
        }
}
2
ответ дан 3 December 2019 в 11:35

Теги

Похожие вопросы