Varnish Cache
é um acelerador HTTP que pode aumentar a velocidade de entrega de conteúdo de 300 a 1000x, principalmente de elementos estáticos e diminuir bastante a utilização de memória pelo Apache.
Ele atua como um proxy entre as requisições do navegador e o Apache2. Recebendo todas as requisições pela porta 80 e redirecionando para o Apache em outra porta.
O Apache utiliza uma grande quantidade de memória por instância, mesmo para requisições de conteúdos estáticos. O Varnish elimina essas requisições de conteúdo estático, deixando
para o Apache somente a execução de conteúdo dinâmico como scripts PHP e CGI.
O Varnish pode ser utilizado tambem para balancear a carga entre dois ou mais servidores web.
Maiores informações de como funciona o Varnish, configurações mais avançadas e sua arquitetura podem ser encontradas no Varnish Book.
Neste exemplo usaremos a porta 8080 para o Apache2.
Instalação
A instalaçâo no Debian é bem simples para a versão 2.1 do Varnish Cache e Debian squeeze 6.0.6
apt-get install varnish
apt-get install libapache2-mod-rpaf
libapache2-mod-rpaf é um módulo para o Apache reconhecer o IP de quem requisitou pelo Varnish.
Após a conclusão da instalação, devemos configurar o Varnish:
Configurando o Varnish
vi /etc/default/varnish
Modifique as linhas:
START=yes
mude a porta 6031 para 80, assim o varnish ouvirá na porta padrão HTTP.
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G"
Adicione e/ou modifique o seguinte conteúdo do arquivo /etc/varnish/default.vcl:
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_fetch {
## Remove the X-Forwarded-For header if it exists.
remove req.http.X-Forwarded-For;
## insert the client IP address as X-Forwarded-For. This is the normal IP address of the user.
set req.http.X-Forwarded-For = req.http.rlnclientipaddr;
## Added security, the "w00tw00t" attacks are pretty annoying so lets block it before it reaches our webserver
if (req.url ~ "^/w00tw00t") {
error 403 "Not permitted";
}
## Deliver the content
return(deliver);
}
## Deliver
sub vcl_deliver {
## We'll be hiding some headers added by Varnish. We want to make sure people are not seeing we're using Varnish.
## Since we're not caching (yet), why bother telling people we use it?
remove resp.http.X-Varnish;
remove resp.http.Via;
remove resp.http.Age;
## We'd like to hide the X-Powered-By headers. Nobody has to know we can run PHP and have version xyz of it.
remove resp.http.X-Powered-By;
}
Configurando o Apache2
Devemos mudar a porta padrão do Apache, da 80 para a 8080:
vi /etc/apache2/ports.conf
NameVirtualHost *:8080 Listen 8080
Configure todos os vhosts que você possui
Para default:
vi /etc/apache2/sites-available/default
e modifique as entradas 80 para 8080
<VirtualHost *:8080> DocumentRoot /var/www </VirtualHost>
tambem faça para outros domínios se tiver configurações separadas por arquivos.
Concluindo
Inicie o Varnish e reinicie o Apache:
service varnish restart
service apache2 restart
Esta pronto para testar.
Monitorando
Pelo varnishstat podemos monitorar as estatísticas de uso do Varnish Cache.
varnishstat

Outro utilitário bem legal para o monitoramento via web do Varnish:
Varnish Agent Dashboard

Maiores informações e como instalar em: https://github.com/pbruna/Varnish-Agent-Dashboard
Leitura recomendada:
The Varnish Book
Blog do Kristian Lyngstøl – Um dos autores do Varnish Book
High-End Varnish – 275 thousand requests per second.
Configuring Varnish for High-Availability with Multiple Web Servers
Adventures in Varnish
Ultra-Performant Dynamic Websites with Varnish
