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.
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
sudo nano /etc/nginx/sites-available/default
3. Adicione a linha abaixo logo na primeira linha do arquivo
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=wordpress:100m inactive=60m;

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

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:
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.
sudo nano /etc/nginx/nginx.conf
##
# 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.
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:
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.