O que é Varnish Cache: instalação e configuração básica do Varnish Cache Server
O Varnish Cache é um cache de proxy reverso que fica na frente do servidor web, guarda as respostas HTTP na memória e responde às mesmas solicitações sem passar pelo servidor de origem. Quando colocamos o Varnish 6.6.2 na frente do WordPress em um servidor AlmaLinux 9.8, as páginas não eram armazenadas em cache por causa do max-age=0, e resolvemos isso definindo um tempo de armazenamento no VCL.
Quais solicitações armazenar em cache e por quanto tempo guardá-las é escrito em um arquivo VCL (Varnish Configuration Language).
1️⃣ Conceito do Varnish Cache: cache de proxy reverso
A cada solicitação, o Varnish verifica primeiro se existe uma resposta armazenada. Se responde com uma resposta armazenada, é um acerto de cache (HIT); se precisa buscar a resposta no servidor de origem (backend), é uma falha de cache (MISS). A resposta buscada em uma falha é guardada durante o tempo de armazenamento e usada nas próximas solicitações.
O Varnish de código aberto não oferece suporte a TLS, por isso não consegue receber solicitações HTTPS diretamente. Na porta 443, o Nginx ou o HAProxy processa o TLS e depois repassa a solicitação ao Varnish.
O projeto de código aberto Varnish Cache mudou de nome para Vinyl Cache a partir da versão 9.0, lançada em março de 2026. O nome Varnish Cache continua sendo usado pela versão que a Varnish Software distribui com recursos de TLS adicionados.
2️⃣ Instalação do Varnish Cache Server
No AlmaLinux 9, você instala com o pacote varnish do repositório padrão (AppStream), e a versão desse pacote é o Varnish 6.6.2, anterior à mudança de nome.
dnf -y install varnishQuando a instalação terminar, verifique a versão com [varnishd -V].
varnishd -Vvarnishd (varnish-6.6.2 revision 17c51b08e037fc8533fb3687a042a867235fc72f)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2020 Varnish SoftwareOs pacotes da família RHEL mantêm a versão 6.6.2, cujo suporte pelo projeto já terminou, e a distribuem apenas com correções de segurança adicionadas. O pacote 6.6.2-7, lançado em junho de 2025, inclui a correção de uma vulnerabilidade de HTTP request smuggling (CVE-2025-47905).
A instalação também cria [/etc/varnish/default.vcl] e [/usr/lib/systemd/system/varnish.service].
grep ExecStart= /usr/lib/systemd/system/varnish.serviceExecStart=/usr/sbin/varnishd -a :6081 -f /etc/varnish/default.vcl -s malloc,256m[-a :6081] define a porta que recebe as solicitações, e [-s malloc,256m], os 256MB de memória usados como espaço de armazenamento do cache.
3️⃣ Configuração básica: backend e porta
O arquivo VCL padrão, [/etc/varnish/default.vcl], já vem com a porta 8080 do mesmo servidor configurada como backend.
vcl 4.1;
backend default {
.host = "127.0.0.1";
.port = "8080";
}No Apache, mude o valor de [Listen] em [httpd.conf] para 8080 para que ele receba as solicitações repassadas pelo Varnish.
# /etc/httpd/conf/httpd.conf
Listen 8080Em sites que usam HTTPS, deixe o Varnish na porta 6081 e conecte o Nginx, que processa o TLS, para que ele repasse as solicitações ao Varnish.
A configuração em que o Varnish recebe solicitações diretamente na porta 80 é adequada para sites que usam apenas HTTP. Nesse caso, crie uma cópia do arquivo de serviço como indica a documentação de instalação da Varnish Software e mude 6081 para 80 na linha [ExecStart].
systemctl edit --full varnishA cópia salva no editor é criada em [/etc/systemd/system/varnish.service], e a porta alterada se mantém mesmo quando você atualiza o pacote.
systemctl enable --now varnishSeja qual for a configuração escolhida, termine com o comando enable e a opção now para registrar a inicialização automática no boot e já iniciar o Varnish.
4️⃣ Verificação do funcionamento: cabeçalhos X-Varnish e Age
Depois de iniciar o Varnish, verifique pelos cabeçalhos de resposta se as páginas do WordPress realmente saem do cache. A solicitação vai direto para a porta 6081 do Varnish, sem passar pelo Nginx, então o domínio e se é HTTPS são informados com os cabeçalhos [Host] e [X-Forwarded-Proto].
curl -sI -H "Host: example.com" -H "X-Forwarded-Proto: https" http://127.0.0.1:6081/ | grep -iE "^(HTTP|cache-control|x-varnish|age|via)"HTTP/1.1 200 OK
Cache-Control: max-age=0
X-Varnish: 1001
Age: 0
Via: 1.1 varnish (Varnish/6.6)[X-Varnish] é o número que o Varnish dá à solicitação, e [Via: 1.1 varnish] indica que a resposta passou pelo Varnish. [Age] é o tempo (em segundos) desde que a resposta foi armazenada no cache.
Quando enviamos a mesma solicitação de novo 3 segundos depois, [X-Varnish] ainda tinha um único número e [Age] era 0, ou seja, o servidor de origem respondeu outra vez. Uma regra que o plugin de cache colocou no [.htaccess] adiciona [max-age=0] ao HTML, e por isso a configuração padrão do Varnish calculou o tempo de armazenamento como 0 segundo.
Solicitações com cookies também não passam pelo cache na configuração padrão. O mesmo vale para os cookies das ferramentas de análise de visitantes, então todas as solicitações de visitantes que têm esses cookies vão para o servidor de origem.
O VCL abaixo repassa ao servidor de origem as solicitações de login e de administração e as que não são GET nem HEAD, e armazena em cache as demais depois de remover os cookies. Respostas com tempo de armazenamento de 0 segundo que não criam cookies são guardadas por 10 minutos, e respostas que pedem para não ser guardadas, como [no-cache], não são guardadas.
vcl 4.1;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
if (req.method != "GET" && req.method != "HEAD") {
return (pass);
}
if (req.url ~ "^/(wp-admin|wp-login\.php)" || req.http.Cookie ~ "wordpress_logged_in_|wp-postpass_|comment_author_") {
return (pass);
}
unset req.http.Cookie;
}
sub vcl_backend_response {
if (beresp.ttl <= 0s && !beresp.http.Set-Cookie) {
set beresp.ttl = 10m;
}
}Depois de alterar o arquivo VCL, recarregue-o com [systemctl reload varnish]. Abaixo está a segunda de duas respostas obtidas ao enviar a mesma solicitação duas vezes ao Varnish com este VCL aplicado.
curl -sI -H "Host: example.com" -H "X-Forwarded-Proto: https" http://127.0.0.1:6081/ | grep -iE "^(HTTP|cache-control|x-varnish|age|via)"HTTP/1.1 200 OK
Cache-Control: max-age=0
X-Varnish: 1004 1002
Age: 3
Via: 1.1 varnish (Varnish/6.6)A segunda solicitação, enviada 3 segundos depois de aplicar o VCL, tinha dois números em [X-Varnish] e [Age] era 3. Dois números significam que a resposta veio do cache, e o segundo número é o da solicitação que buscou a página no servidor de origem e a armazenou.
A solicitação com cookie de login recebeu um único número e foi respondida pelo servidor de origem, enquanto a que tinha apenas o cookie da ferramenta de análise foi respondida pelo cache.
🔢 FAQ & conteúdo recomendado
ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.