Forçar o cache Varnish no LWS

Procédure

Nesta documentação, vamos explicar passo a passo como obrigar o Varnish e os navegadores a manterem os seus recursos em cache, mesmo quando estes enviam requisições Pragma: no‑cache ou Cache‑Control: no-cache.

1. Contexto e arquitetura LWS

As ofertas de hospedagem compartilhada e cPanel/VPS geridos da LWS baseiam-se na pilha :

Navegador ⇄ NGINX (SSL + HTTP/2) ⇄ Varnish Cache ⇄ Apache/PHP-FPM

  • NGINX gere TLS e comprime os conteúdos.
  • Varnish (Fastest Cache) está posicionado como reverse‑proxy para armazenar as respostas HTTP em memória.
  • Apache ou PHP‑FPM geram a resposta final quando o Varnish não tem um HIT.

Quando tudo está corretamente configurado, o Varnish pode entregar até 1000 vezes mais rápido do que um acesso direto ao PHP, ao mesmo tempo que alivia a CPU do servidor.

2. Lembrete: como o Varnish decide colocar em cache?

Elemento Impacto no cache Como influenciá-lo
Método Apenas GET e HEAD são elegíveis EvitAR POST para páginas públicas
Cabeçalhos de resposta Cache-Control, Expires, Pragma Determinam a duração e o escopo Ajustar via .htaccess (ver §3)
Cookies / Set-Cookie Um cookie presente = sem cache por padrão Remover ou neutralizar cookies desnecessários
Status HTTP 200, 203, 301, 302, 404, 410 são armazenáveis em cache Sem ação, mas evitar os 500!

Trucs et astuces


O Varnish ignora por padrão o Cache-Control: no-cache enviado pelo navegador para os ficheiros estáticos, mas respeita a "revalidation logic" se o objeto já estiver em cache.

3. Controlar o tempo de vida via .htaccess

Ative o módulo mod_headers (é o caso por padrão na LWS) e depois coloque o snippet seguinte onde quiser:

⌨ Comando

  Header set Cache-Control "public, max-age=3600, s-maxage=3600, stale-while-revalidate=60, stale-if-error=86400"
  Header set Expires "Thu, 31 Dec 2037 23:55:55 GMT"
  • max-age : duração (em segundos) no navegador.
  • s-maxage : duração específica para caches partilhados (Varnish/CDN).
  • stale-while-revalidate : permite ao Varnish servir um conteúdo expirado enquanto o atualiza em segundo plano.
  • stale-if-error : serve a versão expirada se o backend responder com erro (fail-safe).

3.1. Direcionamento por diretório

Colocar o mesmo ficheiro .htaccess na pasta "/images/" aplica a regra apenas à pasta "images".

3.2. Direcionamento por extensão

⌨ Comando

  
    Header set Cache-Control "public, max-age=2592000, s-maxage=2592000, immutable"
  

immutable : indica ao navegador que não é necessária qualquer revalidação enquanto o objeto não expirar; ideal para ficheiros versionados (style.483bf.css).

3.3. Cache curto para HTML

⌨ Comando

  Header set Cache-Control "public, max-age=300, s-maxage=600, must-revalidate"

Expira após 5 min do lado do cliente e 10 min do lado do Varnish, depois revalidação obrigatória.

4. Cenários concretos de utilização

Caso real Fragmento de .htaccess Porquê?
Landing page atualizada de hora a hora max-age=600, s-maxage=1200 Os visitantes têm dados «quase em tempo real» sem saturar o PHP
CSS/JS versionados max-age=31536000, immutable Tráfego quase nulo no servidor, carregamento instantâneo
Imagens de produtos e‑commerce max-age=604800 Reduz o TTFB, acelera o catálogo
Back‑office / wp-admin no-store, private Evita colocar dados sensíveis no cache partilhado

5. Limpar ou invalidar o cache

A partir da sua hospedagem (script PHP do seu site, tarefa Cron ou terminal SSH), a limpeza do cache Varnish não requer qualquer token:

  • Uma página :
⌨ Comando
curl -X PURGE https://exemple.com/chemin/ressource.jpg
  • Uma pasta inteira, por expressão regular :
⌨ Comando
curl -X PURGE -H 'X-Purge-Method: regex' 'https://exemple.com/images/.*'
  • Todo o site :
⌨ Comando
curl -X FULLPURGE https://exemple.com
  • Em PHP, por exemplo após a atualização de um conteúdo :
Código
$ch = curl_init('https://exemple.com/chemin/page.html');
curl_setopt_array($ch, [CURLOPT_CUSTOMREQUEST => 'PURGE', CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 20]);
curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 200 : cache purge ; 405 : purge recusado
curl_close($ch);

Um script completo, pronto para uma tarefa Cron, é proposto na ajuda Acelerar a velocidade do seu site com Fastest Cache. Também pode limpar o cache a partir do seu painel, com o botão «Limpar o cache» do Fastest Cache.

6. Testar e depurar

⌨ Comando
curl -I https://exemple.com/style.css

Veja:

  • Age: 356 → O Varnish serviu uma resposta com 356 s de idade.
  • Cache-Control: public, max-age=2592000, s-maxage=2592000, immutable
  • X-Cache: HIT (ou MISS).

Com Chrome/Edge : DevTools > Network > Disable cache pode simular um primeiro visitante.

7. Armadilhas comuns

  1. Cookies desnecessários : muitos temas WordPress definem um cookie mesmo para páginas públicas. Remova‑os ou desative‑os via functions.php.
  2. Strings de consulta : por padrão, ?v=123 cria uma nova entrada no cache. Prefira versionar no nome do ficheiro.
  3. Conteúdo sensível : formulários, páginas de área de cliente ➡ no-store, private, max-age=0.
  4. Compressão Brotli/Gzip : ative‑as antes da camada Varnish para evitar um duplo armazenamento em cache.

8. Boas práticas resumidas

  • Use s-maxage ⩾ max-age para manter um cache proxy mais longo do que o do navegador.
  • Coloque immutable em qualquer ficheiro cujo nome contenha um hash.
  • Não misture Expires obsoleto com max-age, exceto para navegadores antigos.
  • Documente os seus TTL num ficheiro CACHE_POLICY.md para a equipa.

9. Recursos úteis

✅ O seu cache Varnish está agora sob controlo!

help.lws.net/a/1949
Este artigo foi útil?

Sim

Não

Lido 7 648 vezes

Obrigado! Não hesite em colocar questões sobre a nossa documentação se pretender mais informações e ajudar-nos a melhorá-la.

Artigos semelhantes

Uma pergunta sobre este artigo?

Coloque-a à equipa LWS e à comunidade. A resposta é publicada após moderação.

Fazer uma pergunta à equipa do LWS e à sua comunidade

RGPD: Responsável: LWS-Ligne Web Services. Finalidade: moderação e publicação pública da sua pergunta, eventual notificação de uma resposta. Base legal: consentimento (art. 6.º, n.º 1, al. a) RGPD). Conservação dos e-mails: 90 dias após a notificação, 12 meses no máximo sem resposta. Para exercer os seus direitos, consulte a secção RGPD das nossas condições gerais.