Acelerando a entrega de conteúdo do servidor web Apache2 com o Varnish Cache

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

Deixe uma resposta

Or