Varnish Apache · 4 min read · Jan 01, 2026
Colocando Varnish na Frente do Apache no Ubuntu/Debian
Colocando Varnish na Frente do Apache no Ubuntu/Debian
Versão 1.0, 15-10-2010
Siga-me no Twitter
Varnish é um “acelerador web” de código aberto que você pode usar para acelerar seu site.
Ele pode armazenar em cache certos elementos estáticos, como imagens ou javascript, mas você também pode usá-lo para outros fins, como balanceamento de carga ou alguma segurança adicional.
Neste tutorial, vamos nos concentrar neste último.
Neste modo, o Varnish impedirá que solicitações HTTP incompletas cheguem ao seu servidor web Apache.
Este tutorial é construído no Ubuntu, mas provavelmente também funcionará no Debian.
Primeiramente, certifique-se de que você está executando o Apache2 e que ele está configurado.
Instalando Varnish
Isso é bastante fácil, uma vez que está no repositório do Ubuntu. No entanto, você pode querer usar o repositório do Varnish para garantir que tenha uma versão mais recente. Para adicionar este, execute:
sudo curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -sudo echo "deb http://repo.varnish-cache.org/debian/ $(lsb_release -s -c) varnish-2.1" >> /etc/apt/sources.listAtualize o APT e instale o Varnish:
sudo apt-get updatesudo apt-get install varnishÓtimo, agora você tem o Varnish, mas ainda precisamos configurá-lo.
Mudando as configurações do Varnish
Primeiro, precisamos mudar a porta padrão. Edite /etc/default/varnish:
vim /etc/default/varnishRole para baixo um pouco, até encontrar uma linha não comentada começando com “ DAEMON_OPTS “.
- Mude :6081* para :80* para que ele escute na porta HTTP padrão.
- edite default.vcl para algo diferente, eu escolhi “mysite.vcl”.
Salve o arquivo.
Edite o arquivo VCL que você mencionou no arquivo anterior. No meu caso, estarei editando /etc/varnish/mysite.vcl. Cole o seguinte conteúdo:
## Redirecionar solicitações para o Apache, rodando na porta 8000 no localhost
backend apache {
.host = "127.0.0.1";
.port = "8000";
}
## Buscar
sub vcl_fetch {
## Remover o cabeçalho X-Forwarded-For se existir.
remove req.http.X-Forwarded-For;
## inserir o endereço IP do cliente como X-Forwarded-For. Este é o endereço IP normal do usuário.
set req.http.X-Forwarded-For = req.http.rlnclientipaddr;
## Segurança adicional, os ataques "w00tw00t" são bastante irritantes, então vamos bloqueá-los antes que cheguem ao nosso servidor web
if (req.url ~ "^/w00tw00t") {
error 403 "Não permitido";
}
## Entregar o conteúdo
return(deliver);
}
## Entregar
sub vcl_deliver {
## Vamos esconder alguns cabeçalhos adicionados pelo Varnish. Queremos ter certeza de que as pessoas não vejam que estamos usando Varnish.
## Como não estamos armazenando em cache (ainda), por que se preocupar em dizer às pessoas que o usamos?
remove resp.http.X-Varnish;
remove resp.http.Via;
remove resp.http.Age;
## Gostaríamos de esconder os cabeçalhos X-Powered-By. Ninguém precisa saber que podemos rodar PHP e temos a versão xyz dele.
remove resp.http.X-Powered-By;
}
Salve o arquivo. Tudo bem, essa foi a parte do Varnish. Não inicie ainda.
Mudando as configurações do Apache
OK, então precisamos fazer o Apache2 escutar no localhost. Para isso, algumas pequenas mudanças são necessárias.
vim /etc/apache2/ports.confMude:
NameVirtualHost *:80
Listen 80Para:
NameVirtualHost *:8000
Listen 127.0.0.1:8000O Apache escutará nessa porta. Você também precisará editar seus vhosts. Abra seu(s) vhost(s) e substitua
por
Até aqui tudo bem. Agora precisamos instalar um módulo extra do Apache para garantir que o endereço IP do usuário fique correto. Como o Varnish está basicamente conversando com o Apache2, você veria 127.0.0.1 como IP do visitante.
apt-get install libapache2-mod-rpafO módulo RPAF (Reverse Proxy Add Forward) garantirá que o IP de 127.0.0.1 seja substituído pelo IP definido em X-Forwarded-For definido pelo Varnish.
Reiniciar os daemons
Reinicie o Apache:
/etc/init.d/apache2 restartVerifique se está vinculado ao IP/Porta corretos executando:
netstat -lp | grep apache2Se você ver:
tcp 0 0 localhost:8000 *:* LISTEN 4586/apache2Isso está correto. Caso contrário, você cometeu um erro. Tudo bem, agora precisamos reiniciar o Varnish para deixá-lo escutando na porta 80.
/etc/init.d/varnish restartVerificamos isso novamente executando:
netstat -lp | grep varnishO resultado será:
tcp 0 0 *:www *:* LISTEN 4498/varnishd
tcp6 0 0 [::]:www [::]:* LISTEN 4498/varnishd(Sim, o varnish também escuta em qualquer endereço IPv6).
Então… Agora colocamos o Varnish na frente do Apache2. Podemos testar se o site ainda funciona simplesmente visitando-o. Você verá o site, como se nada tivesse acontecido. Você pode testar isso ainda mais desligando o apache. Você verá então uma página de erro do Varnish.
Recursos adicionais
Bem, você pode querer mudar o nome do servidor HTTP de “Apache” para algo diferente. Isso pode ser feito editando seu arquivo VCL, localizado em /etc/varnish. Após:
sub vcl_fetch {Adicione:
## Remover o cabeçalho http.Server
unset obj.http.Server;
## Mudar o cabeçalho http.Server para algo diferente
set obj.http.Server = "Incognito";
Obviamente, você pode fazer parecer o que quiser. Seu dominio.com, por exemplo. Por favor, note que todos os domínios neste servidor usarão o mesmo nome de servidor.
Bem, é isso. Agora você tem um proxy reverso na frente do seu Apache!
Com um pouco de ajuste, você pode deixá-lo armazenar em cache ou balancear carga.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.