Março 14, 2022

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/varnishe /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.vcle 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 varnishe 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.

Deixe uma resposta

O seu endereço de email não será publicado.