Назад | Перейти на главную страницу

Настройка Varnish для перезаписи заголовков Expires / Cache-Control для кэширования на стороне клиента

Как настроить Varnish так, чтобы все ответы на запросы, соответствующие запросу «* .css», кэшировались в браузере клиента на 30 дней?

Я пытаюсь добиться, чтобы Varnish установил правильные настройки «Expires:» и / или «Cache-Control», чтобы все CSS: s кэшировались в течение 30 дней независимо от того, что серверная часть говорит о кешируемости на стороне клиента эти объекты.

Это помогает:

sub vcl_fetch {
  ..
  if (req.url ~ "\.css$") {
    set obj.http.magicmarker = "1";
  }
  ..
}

sub vcl_deliver {
  ..
  if (resp.http.magicmarker) {
    unset resp.http.magicmarker;
    set resp.http.Cache-Control = "...";
    set resp.http.Expires = "...";
    set resp.http.Age = "...";
  }
  ..
}

Мне просто нужно отметить, что лак отлично подходит для переписывания заголовков. Проверка любого URL-адреса возможна в vcl_recv, а в vcl_fetch это обычное приложение для varnish. В recv вы анализируете входящий запрос. В fetch вы анализируете ответ серверной части.

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

В выборке вы можете сделать

unset beresp.http.expires;
unset beresp.http.cache-control;

так же как

set beresp.http.Cache-Control = "max-age = 2678406";

и так далее.

Я не думаю, что Varnish позволит вам ограничить правила VCL до "* .css". Возможно, вам придется спросить в списке рассылки Varnish точную информацию по этому поводу. Должна быть возможна область действия по типу MIME.

Предполагая, что у ваших объектов уже установлены заголовки кеша, но вы хотите их нормализовать, тогда вам должна помочь модифицированная версия этой VCL документации Varnish: http://varnish.projects.linpro.no/wiki/VCLExampleLongerCaching

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