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