Como configurar um Varnish cache server – Swapps
sites com alto tráfego precisam servir o mesmo conteúdo várias vezes para usuários diferentes. Dependendo do seu aplicativo, pode ser muito caro (recursos falando) processar toda a lógica do aplicativo toda vez que um usuário solicita uma página da web. Aqui é onde o Cache do servidor vem, você pode apenas salvar uma cópia temporária do conteúdo na memória e servir este conteúdo para todos os usuários.
o verniz é ótimo para armazenar em cache o conteúdo no lado do servidor. Essencialmente, você deve armazenar em cache o conteúdo HTML, mas também pode armazenar em cache os arquivos: CSS, JS, imagens, documentos.
parece bom, mas a verdade é que, por padrão, o verniz não faz nada, ou pelo menos você pode estar desperdiçando as vantagens deste software, e a documentação não ajuda, então escrevi este artigo, para que você possa obter o máximo benefício do verniz. Vou explicar onde e como configurar, testar e implantar um servidor de cache do Varnish para sua aplicação.
para fins de demonstração, digamos que tenhamos 2 instâncias de servidor para nossos servidores de aplicativos e cache com os seguintes endereços IP locais:
- servidor de aplicativos: 192.168.1.2
- servidor de Cache: 192.168.1.3
instalar Varnish Cache Server
para este fim artigos, vamos instalar um Ubuntu server 16.04 com Varnish 4.0. Para instalar o Verniz, você só precisa executar:
sudo apt install varnish
eu vou instalar o Verniz 4.0, e a partir de agora você vai estar prestando atenção especial para 2 arquivos específicos:/etc/default/varnish
e /etc/varnish/default.vcl
Infraestrutura de configuração
A primeira coisa que você precisa fazer é configurar o back-end ou instruir Verniz onde o aplicativo web ao vivo:
- Qual é o nome do host ou endereço IP?
- o que é a porta?
para definir que você precisa ir e atualizar o arquivo /etc/varnish/default.vcl
e encontrar a seguinte seção, que será configurada para o nosso propósito de exemplo como este:
backend default { .host = "192.168.1.2"; .port = "8080"; .first_byte_timeout = 60s; .connect_timeout = 300s;}
ele instruirá o Varnish a ouvir o aplicativo em execução no IP 192.168.1.2 e na porta 8080.
Configure o daemon do verniz
a primeira coisa que você precisa definir onde o verniz será executado. Vamos deixá-lo em execução na porta padrão 6081. É muito comum executar este daemon na porta 80 e 443 para SSL, mas preferimos colocar o NGINX na frente e deixá-lo para atender ao tráfego.
em relação à memória, uma instalação em branco de verniz será executada com 256 MB de memória, o que pode ser suficiente para alguns aplicativos, mas para aplicativos de alto tráfego, pode não ser suficiente e muito mais se você reservou um servidor dedicado apenas para cache.
você pode mudar isso em:
/etc/default/varnish
Encontre a seguinte seção:
DAEMON_OPTS="-a :6081 \-T localhost:6082 \-f /etc/varnish/default.vcl \-S /etc/varnish/secret \-s malloc,256m"
Para atualizar a quantidade de memória RAM, você alterar a última linha, onde se diz 256m e atualizar o valor requerido, no meu caso, eu gostaria de dedicar 3GB de RAM para Verniz, de modo que o bloco vai olhar como:
DAEMON_OPTS="-a :6081 \-T localhost:6082 \-f /etc/varnish/default.vcl \-S /etc/varnish/secret \-s malloc,3G"
Validar a sua execução com o direito de configuração
Confirmar que É executado conforme o esperado, verifique o processo de ps aux | grep varnish
e você deve ver algo como:
/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,3G
corrija o daemon de inicialização do Varnish em algumas instalações do Ubuntu
detectamos um bug em que o serviço não está seguindo as instruções definidas no arquivo varnish e você pode precisar editar o serviço de inicialização.
Para fazer isso abra e edite o arquivo
/lib/systemd/system/varnish.service
e você verá algo como isto:
Description=Varnish HTTP acceleratorDocumentation=https://www.varnish-cache.org/docs/4.1/ man:varnishdType=simpleLimitNOFILE=131072LimitMEMLOCK=infinityExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256MExecReload=/usr/share/varnish/reload-vclProtectSystem=fullProtectHome=truePrivateTmp=truePrivateDevices=trueWantedBy=multi-user.target
Em ordem para que ele funcione, você precisará atualizar a seção dentro da linha ExecStart e substituí-lo para a configuração necessária:
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,3G
Depois que você terminar com isso, você precisa recarregar o serviço daemon: systemctl daemon-reload
e reinicie o verniz.
como configurar para limpar o Cache
existem 2 maneiras de limpar o Cache do verniz:
- reinicie o serviço de verniz.
- envie uma solicitação de purga para o Varnish server.
reiniciar verniz é apenas sobre reiniciar o serviço:
sudo service varnish restart
mas o que realmente precisamos é poder enviar uma solicitação de purga do servidor de aplicativos. Isso pode ser conseguido instruindo o servidor a limpar um caminho específico ou todos eles. Usando CURL, a solicitação seria semelhante:
curl -X PURGE http://192.168.1.3:6181
por padrão, o Varnish não permitirá uma solicitação de remoção de um servidor externo, portanto, você precisa permitir solicitações do servidor de aplicativos. Para fazer isso, vá e edite /etc/varnish/default.vcl
e encontre a seção purge onde você precisa adicionar o endereço IP do servidor de aplicativos:
acl purge { "localhost"; "127.0.0.1"; "192.168.1.2"/24;}
como depurar a purga
você precisará validar se tudo está funcionando corretamente. Para fazer isso, você pode usar o seguinte comando:
varnishlog -g request -q 'ReqMethod eq "PURGE"'
então você pode enviar uma solicitação de purga e você deve ver algo assim para confirmar que a solicitação de purga foi recebida:
* << Request >> 1179851- Begin req 1179850 rxreq- ReqStart 192.168.195.197 39700- ReqMethod PURGE- ReqURL /.*- ReqProtocol HTTP/1.1- ReqHeader Host: swapps.com- ReqHeader User-Agent: W3 Total Cache- ReqHeader Connection: close- ReqHeader X-Forwarded-For: 192.168.195.197- VCL_call RECV- Timestamp Process: 1531199642.768541 0.000094 0.000094- RespHeader Date: Tue, 10 Jul 2018 05:14:02 GMT- RespHeader Server: Varnish- RespHeader X-Varnish: 1179851- RespProtocol HTTP/1.1- RespStatus 200- RespReason OK- RespReason Purged- End
um status de 200 OK significa que tudo correu bem e o Varnish limpou o cache do URL solicitado e você deve ter tudo o que precisa para começar a armazenar conteúdo em cache em seu servidor.
o próximo passo se você não tiver feito é configurar as regras de qual conteúdo você deseja armazenar em cache e quais não, mas esse é o tópico para outra postagem do blog e dependerá muito do tipo de aplicativo, framework ou CMS usado.