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.list

Atualize o APT e instale o Varnish:

sudo apt-get update
sudo 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/varnish

Role 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.conf

Mude:

NameVirtualHost *:80
Listen 80

Para:

NameVirtualHost *:8000
Listen 127.0.0.1:8000

O 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-rpaf

O 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 restart

Verifique se está vinculado ao IP/Porta corretos executando:

netstat -lp | grep apache2

Se você ver:

tcp        0      0 localhost:8000          *:*                     LISTEN      4586/apache2

Isso 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 restart

Verificamos isso novamente executando:

netstat -lp | grep varnish

O 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.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.