Como usar o Varnish Cache para otimizar o desempenho do meu site?

De Wiki
Ir para: navegação, pesquisa

Este recurso está disponível nas plataformas PHP e JVM/Java da CentralServer, sem necessidade de instalação ou configuração da ferramenta e sem custo adicional.

O Varnish armazena em memória (cache) uma cópia de arquivos com conteúdos estáticos, como imagens, vídeos e arquivos HTML/CSS/JS. E sempre que ocorre um novo acesso ao site, os arquivos solicitados que estiverem armazenados no cache do Varnish são enviados imediatamente. Somente os arquivos que não estiverem em cache serão carregados a partir do servidor web.

Atuação do Varnish em função do tipo de conteúdo

Conteúdos que são acelerados

  • Tratam-se dos objetos que não mudam de um usuário para outro.
Galeria de imagens ou as próprias imagens (png|gif|jpeg|jpg|ico)

Javascript

Páginas de uma notícia

Menus

swf, css, pdf, txt, html, htm, gz, zip, xml

Conteúdos que não são acelerados

Abaixo seguem alguns exemplos de conteúdos que não são acelerados pelo cache:

Páginas customizadas para o usuário

Conteúdos que utilizam HTTPS

Importante:

Quando um objeto for colocado em cache, seu TTL será setado de acordo com as configurações do Varnish. Enquanto o TTL do objeto não expirar, o Varnish não irá buscar por atualização deste objeto no Backend.

TTL padrão= 120 segundos (2 minutos)
TTL para extensões  jpeg-jpg-png-gif-ico-webp-js-css-txt-pdf-gz-zip-lzma-bz2-tgz-tbz-html-htm = 1200 segundos (20 minutos)


Restrições por endereços IP ao acesso à determinados conteúdos

Restrições de acesso com arquivos ".htaccess"

No servidor web Apache, o arquivo .htaccess (hypertext access) é o nome padrão de um arquivo de configuração a nível de diretório que permite um gerenciamento descentralizado das configurações do servidor web. Basicamente o arquivo serve para configurar o tipo de acesso a um determinado diretório e seus subdiretórios. Com o Varnish, quando o acesso a um determinado diretório via URL for restrito à determinados endereços IPs, ou Ranges de IPs, utilizando-se arquivo .htaccess, temos que ficar atentos aos seguinte detalhes:

Além das configurações já existentes, o arquivo .htaccess deverá conter uma configuração semelhante à apresentada abaixo:

Header add Cache-Control "max-age=0"
SetEnvIF X-Forwarded-For "192.168.1.*|1.1.1.1|2.2.2.2" AllowIP
Order deny,allow
Deny from all
Allow from env=AllowIP

Os IPs informados acima são apenas exemplos ("192.168.1.*|1.1.1.1|2.2.2.2"), estes devem ser substituídos pelo endereços IPs válidos que você queira permitir acesso ao site.

Importante:

Se esta configuração não for aplicada, o endereço IP que chegará ao arquivo .htaccess para se autenticar, será o endereço IP do servidor Varnish, e não o do Cliente que solicitou o conteúdo.

Restrições de acesso com PHP

Ao usar o Varnish, o programador deverá utilizar a variável $_SERVER['HTTP_X_FORWARDED_FOR'] ao invés da variável $_SERVER[REMOTE_ADDR'] para obter o endereço IP de onde o usuário está visualizado a página.

Nota: Verificar se a variável $_SERVER['HTTP_X_FORWARDED_FOR'] existe:

  • Se SIM, usar $_SERVER['HTTP_X_FORWARDED_FOR']
  • Senão, usar $_SERVER[REMOTE_ADDR']

Essa estrutura condicional é importante, pois se o Varnish for desativado do servidor, a configuração default estará disponível.


Recursos que o programador poderá utilizar, se desejar que a página não vá para o Cache

Utilizando arquivo .htaccess

  • Se a linha abaixo for adicionada em um arquivo .htaccess e este for colocado em um diretório. Todos os objetos deste diretório e subdiretórios abaixo deste, não entrarão no cache
 Header add Cache-Control "max-age=0"

Via código PHP

  • Se o programador desejar que não seja feito cache de uma página específica, ele poderá inserir o seguinte código PHP na página.
 header("Cache-Control: max-age=0");

Utilizando Cookies

Segundo a documentação do Varnish (https://www.varnish-cache.org/docs/3.0/tutorial/cookies.html), por padrão ele não faz cache de páginas que contenham cookies.

Em outras palavras, o Varnish não armazena em cache um objeto vindo do backend com um cabeçalho Set-Cookie presente. Além disso, se o cliente enviar um cabeçalho Cookie, o Varnish irá ignorar o cache e ir diretamente para o backend.

Nota: O Cookie é valido para o Vhost, se o Cookie for definido na homepage de um domínio, (seusite.com.br), ele continuará sendo persistente para todas as suas sub-paginas (seusite.com.br/teste/pagina1.html)