Configurando o Varnish para reescrever os cabeçalhos Expires / Cache-Control para o cache do lado do cliente

7

Como configuro o Varnish para que todas as respostas a solicitações correspondentes digam "* .css" sejam armazenadas em cache no navegador do cliente por 30 dias?

O que eu estou tentando alcançar é fazer o Varnish definir as configurações "Expires:" e / ou "Cache-Control" corretas para que todas as CSS: s sejam armazenadas em cache por 30 dias, independentemente do que o backend disser sobre o cliente. cache de lado desses objetos.

    
por knorv 14.08.2009 / 15:49

3 respostas

10

Isso faz o truque:

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 = "...";
  }
  ..
}
    
por 23.08.2009 / 20:44
0

Eu não acho que o Varnish permita que você esclareça as regras VCL para "* .css". Você pode ter que perguntar na lista de discussão do Varnish para informações exatas sobre isso. O escopo do tipo MIME deve ser possível.

Supondo que seus objetos já tenham os cabeçalhos de cache definidos, mas você deseja normalizá-los, então uma versão modificada desta documentação do Varnish VCL deverá ajudá-lo: link

Em geral, o Varnish não foi criado para fazer grandes quantidades de reescrita de cabeçalho ou conteúdo. Seus servidores da web ou aplicativos da web devem fazer isso melhor do que o Varnish.

    
por 18.08.2009 / 01:32
0

Só preciso salientar que o verniz é realmente excelente para reescrever cabeçalhos. O teste de qualquer URL é possível em vcl_recv e, em vcl_fetch, é um aplicativo comum para verniz. Em recv, você analisa uma solicitação recebida. Em busca, você analisa a resposta de back-end.

Geralmente, você manipula a solicitação em recv e a direciona para um back-end, e manipula a resposta em busca, e reescreve os cabeçalhos de acordo, antes de armazenar potencialmente o objeto no cache e entrega a resposta.

Em busca, você pode fazer

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

bem como

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

e assim por diante.

    
por 20.10.2011 / 04:48