Alex Junio
Voltar para o Blog
WordPress

Hospedagem WordPress / Cache Nginx e Cache de Objetos

admin

admin

Engenheiro Cloud & DevOps

Publicado em

25/04/2022

Compartilhe

Cache de Conteúdo Nginx

No Nginx podemos realizar uma série de configurações, uma delas é o cache de conteúdo. Ao ativarmos o cache de conteúdo, nosso site WordPress vai ganhar muito poder de performance, pois irá reduzir drasticamente o tempo de resposta e como consequência irá melhorar a experiência do usuário.

Podemos dizer bem a grosso modo como isso funciona. Quando uma página ou o resultado de uma página entrar for processada pelo PHP e MySQL, o Nginx irá armazenar o resultado no cache do servidor, e quando um segundo acesso for feito, o nginx irá responder muito mais rápido com o conteúdo da página. Isso é válido se a página não sofrer nenhuma alteração. As vantagens são:

  • Diminuição do consumo de CPU e RAM
  • Potencialização no número de conexões simultâneas que o WordPress poderá atender

Para configurar o Cache Nginx siga os passos abaixo.

1. Crie um diretório para que o Nginx utilize para armazenamento de cache persistente e de as permissões para que o usuário consiga manipular arquivos dentro do diretório do cache.

bash
sudo mkdir -p /etc/nginx/cache
chown -R alex:alex /etc/nginx/cache

2. Abra o arquivo do bloco de configuração nginx do nosso wordpress

bash
sudo nano /etc/nginx/sites-available/default

3. Adicione a linha abaixo logo na primeira linha do arquivo

bash
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=wordpress:100m inactive=60m;
hospedagem wordpress

4. Agora precisamos informar ao Nginx para que ele não coloque certas páginas em cache, como por exemplo a página de login ou telas do administrador.

Adicione o conteúdo antes da linha #### Locations

bash
set $skip_cache 0;

# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
    set $skip_cache 1;
}   
if ($query_string != "") {
    set $skip_cache 1;
}   

# Don’t cache uris containing the following segments
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
    set $skip_cache 1;
}   

# Don’t use the cache for logged in users or recent commenters
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
    set $skip_cache 1;
}

5. A seguir, adicione as seguintes diretivas dentro do bloco do php:

bash
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache wordpress;
fastcgi_cache_valid 60m;

Ficará assim:

Salve o arquivo usando CTRL + X seguido de Y e Enter.

Por fim, adicione as diretivas abaixo no seu nginx.conf , logo abaixo da linha de logs.

bash
sudo nano /etc/nginx/nginx.conf
bash
##
# Cache Settings
##

fastcgi_cache_key "$scheme$request_method$host$request_uri";
add_header Fastcgi-Cache $upstream_cache_status;

Salve o arquivo usando CTRL + X seguido de Y e Enter, e reinicie o Nginx para validar todas as novas configurações.

bash
sudo service nginx restart

Terceiro Benchmark: Nginx com Cache

Agora que já habilitamos o cache do Nginx, podemos fazer um terceiro teste de carga. Eu espero que agora o servidor utilize menos ou praticamente nada do PHP e MySQL, e apenas o Nginx que trabalhe fornecendo o conteúdo já armazenado em cache.

Ao analisar o gráfico do teste simulando novamente os 100 usuários, dessa vez os resultados foram surpreendentes. Conseguimos realizar 19.856 solicitações com sucesso, nenhum erro 400/400, nenhum timeout e nenhum erro de rede.

Como o conteúdo em cache estava sendo fornecido pelo Nginx, mesmo no pico máximo de 100 usuários o tempo de resposta ficou em média 151ms, muito abaixo dos primeiros testes que superavam

Observe que durante o teste o consumo de CPU ficou em média 11% 20% no máximo, o consumo de memória ficou em média 278M e 240M, e o Load Average praticamente zerado.

Nos processos do sistema vimos apenas o procsso do Nginx trabalhando rs.

Plugin de Cache Nginx para WordPress

Você precisa instalar um plugin no WordPress para que ele consiga limpar o cache do servidor sempre que uma atualização for feita. Felizmente existe um plugin gratuito que é o Nginx Cache, você pode instalar esse plugin e seguir para a configuração.

Uma vez que o plugin está instalado, você precisa ativa-lo e configura-lo. No WordPres clique em Ferramentas – Nginx Cache, e insira no Cache Zone Path o caminho do servidor onde o Nginx armazena o cache. Também habilite o Purge Cache para que ele limpe o cache sempre que algo for atualizado.

Por fim, salve e faça alguns testes mudando o título do WordPress ou alguma palavra em alguma página e veja se o conteúdo é atualizado corretamente.

Cache de Objetos com Redis

O cache de objetos armazena os resultados da consulta do banco de dados para que, ao invéz de executar uma mesma consulta em cada acesso do usuário, os resultados sejam servidos a partir do cache.

Isso também melhora consideravelmente o desempenho do WordPress, pois elimina a necessidade de consultas ao banco de forma desnecessária e consumindo recursos a toa.

O Redis é um software de código aberto e conhecido em todo o mundo, é o melhor software para essa finalidade. E é ele quem iremos instalar no nosso servidor WordPress.

Para instalar o Redis execute os comandos abaixo:

bash
sudo apt install -y redis-server
sudo service php8.0-fpm restart

Você pode instalar o módulo Redis Nginx em seu servidor para executar um cache, mas para que o WordPress use o Redis como um cache de objeto, você precisa instalar um plug-in de cache de objeto Redis. 

Após o plugin for instalado e ativo, você precisa ativar o cache de objetos, basta clicar em Ativar o cache de objeto.

Se tudo estiver ok, você verá uma tela como a imagem abaixo:

Agora que o cache de objetos está ativo, o servidor pode ter um leve aumento no consumo de memória RAM uma vez que o Redis armazena cache na memória RAM e não no disco. No entanto, várias consultas que outrora seriam enviados direto para o banco, não vão mais precisar incomoda-lo na maioria das vezes.

Conclusão

Nesse capítulo vimos como configurar o Cache Nginx no servidor e o cache de Objetos com o Redis. Esses dois tipos de cache vão melhorar e muito o desempenho dos nossos projetos WordPress e manter uma estabilidade no nosso servidor.

No próximo capítulo vamos revisar tarefas cron e implementação uma solução de envio de e-mails no nosso WordPress.

admin

Escrito por admin

Engenheiro Cloud & DevOps com mais de 10 anos de experiência construindo e escalando infraestruturas de alto tráfego em AWS, DigitalOcean e Servidores Dedicados.

Conhecer Serviços →

Comentários (4)

Deixe seu comentário

U
Thiago Moreira
Thiago Moreira
Há 2 dias

Excelente artigo, Alex! Estávamos exatamente com esse problema de overprovisioning na nossa startup. Aplicar os Savings Plans salvou quase 30% da nossa conta mensal.

Alex Junio
Alex JunioAutor
Há 1 dia

Fico feliz que ajudou, Thiago! Essa economia faz total diferença no longo prazo. Se precisarem de ajuda para escalar o banco de dados depois, me deem um toque.

Juliana Costa
Juliana Costa
Há 4 dias

Não tinha pensado em usar Spot para as filas do SQS. Existe algum risco do Spot ser finalizado no meio de um processamento pesado de vídeo?

Alex Junio
Alex JunioAutor
Há 4 dias

Sim, Juliana! A AWS te avisa com 2 minutos de antecedência. O segredo é sua aplicação capturar o evento de interrupção e colocar a mensagem de volta na fila (visibility timeout) antes da máquina morrer.

Roberto Freitas
Roberto Freitas
Há 1 semana

Muito bom o conteúdo técnico. Falta só mais detalhes sobre instâncias Graviton.

Carla Mendes
Carla Mendes
Há 1 semana

Sensacional! Usei as dicas de Right-Sizing e deu muito certo no meu e-commerce.