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.
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
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.
| 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.
Ative o módulo mod_headers (é o caso por padrão na LWS) e depois coloque o snippet seguinte onde quiser:
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"
Colocar o mesmo ficheiro .htaccess na pasta "/images/" aplica a regra apenas à pasta "images".
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
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.
| 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 |
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:
curl -X PURGE https://exemple.com/chemin/ressource.jpg
curl -X PURGE -H 'X-Purge-Method: regex' 'https://exemple.com/images/.*'
curl -X FULLPURGE https://exemple.com
$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.
curl -I https://exemple.com/style.cssVeja:
Com Chrome/Edge : DevTools > Network > Disable cache pode simular um primeiro visitante.
✅ O seu cache Varnish está agora sob controlo!
Coloque-a à equipa LWS e à comunidade. A resposta é publicada após moderação.