Aprenda a configurar o Wordpress com NGINX utilizando o cache nativo fastcgi_cache.
Esse cache do Nginx é poderoso e vai melhorar a performance armazenando o HTML de resposta e reduzindo a carga do servidor.
Paramentros FastCGI Cache
fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:50m inactive=6h max_size=256M use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
fastcgi_cache_lock_age 5s;
fastcgi_cache_lock_timeout 5s;
fastcgi_cache_methods GET HEAD;
fastcgi_cache_background_update on;
fastcgi_cache_valid 200 24h;
fastcgi_cache_valid 301 302 30m;
fastcgi_cache_valid 499 502 503 1m;
fastcgi_cache_valid 404 1h;
fastcgi_cache_valid any 1h;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SERVER_NAME $http_host;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
fastcgi_keep_conn on;
Explicação linha por linha do arquivo de configuração:
fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:50m inactive=6h max_size=256M use_temp_path=off;
Esta linha define o diretório onde o cache será armazenado (/var/run/nginx-cache), a quantidade de níveis de subdiretórios (levels=1:2), a zona de metadados (keys_zone=WORDPRESS:50m) e o tamanho máximo (50m) do índice, o tempo máximo que o cache é utilizado (inactive=6h), o limite máximo a ser utilizado de cache (max_size=256M) diferente do tamanho do índice e opção para desativar o uso de arquivos temporários (use_temp_path=off).
fastcgi_cache_key "$scheme$request_method$host$request_uri";
Isso define a chave de cache usada para identificar o conteúdo armazenado em cache.
A chave é gerada usando uma combinação do protocolo da solicitação ($scheme) http ou https, o método da solicitação ($request_method) GET ou HEAD, o nome do host ($host) URL do site ex: exemplo.com.br e o URI da solicitação ($request_uri) caminho ex: /pagina-exemplo
Exemplo:
httpsGETexemplo.com.br/pagina-exemplo
fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503;
Define as condições em que o conteúdo armazenado em cache obsoleto pode ser usado se o servidor de back-end estiver indisponível ou retornar um erro. Neste caso, o conteúdo obsoleto pode ser usado se houver um erro, um tempo limite, um cabeçalho inválido ou se o servidor retornar um erro 500 ou 503.
fastcgi_cache_min_uses 1
Esta configuração define o número mínimo de solicitações que devem ser feitas para que um item de cache seja considerado válido. Neste caso, qualquer item que tenha sido solicitado pelo menos uma vez será armazenado em cache.
fastcgi_cache_lock on;
fastcgi_cache_lock_age 5s;
fastcgi_cache_lock_timeout 5s;
Isso habilita o bloqueio de cache, o que impede que várias solicitações gravem no mesmo item de cache simultaneamente e especificam a idade e o tempo limite dos bloqueios de cache, respectivamente. Neste caso, um bloqueio se tornará obsoleto e será liberado após 5 segundos, e os bloqueios serão mantidos por no máximo 5 segundos antes de serem liberados.
fastcgi_cache_methods GET HEAD;
Isso define os métodos HTTP que podem ser armazenados em cache. Neste caso, apenas as solicitações GET e HEAD serão armazenadas em cache.
fastcgi_cache_background_update on;
Isso habilita as atualizações em segundo plano dos itens de cache, o que significa que o item de cache será atualizado em segundo plano enquanto o cliente recebe o conteúdo obsoleto. Isso pode ajudar a reduzir o tempo de resposta para os clientes.
fastcgi_cache_valid 200 24h;
fastcgi_cache_valid 301 302 30m;
fastcgi_cache_valid 499 502 503 1m;
fastcgi_cache_valid 404 1h;
fastcgi_cache_valid any 1h;
Isso define o período de validade do conteúdo armazenado em cache para diferentes códigos de resposta HTTP. Neste caso, o conteúdo com um código de status 200 será válido por 24 horas, o conteúdo com um código de status 301 ou 302 será válido por 30 minutos, o conteúdo com um código de status 499, 502 ou 503 será válido por 1 minuto e o conteúdo com um código de status 404 será válido por 1 hora. O parâmetro any define um período de validade padrão para todos os outros códigos de status, neste caso, 1 hora.
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
Essas configurações controlam o tamanho do buffer e o número de buffers usados para ler e gravar solicitações e respostas FastCGI.
fastcgi_param SERVER_NAME $http_host;
Isso define um parâmetro a ser passado para o servidor FastCGI. Neste caso, ele define o parâmetro SERVER_NAME para o valor do cabeçalho Host enviado pelo cliente.
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
Isso define uma lista de cabeçalhos que devem ser ignorados pelo cache. Neste caso, o cache ignorará os cabeçalhos Cache-Control, Expires e Set-Cookie.
fastcgi_keep_conn on;
Isso habilita conexões persistentes entre o Nginx e o servidor FastCGI, o que pode melhorar o desempenho ao reduzir o overhead de estabelecer uma nova conexão para cada solicitação.
Arquivo de configuração completo:
fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:50m inactive=6h max_size=256M use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
fastcgi_cache_lock_age 5s;
fastcgi_cache_lock_timeout 5s;
fastcgi_cache_methods GET HEAD;
fastcgi_cache_background_update on;
fastcgi_cache_valid 200 24h;
fastcgi_cache_valid 301 302 30m;
fastcgi_cache_valid 499 502 503 1m;
fastcgi_cache_valid 404 1h;
fastcgi_cache_valid any 1h;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SERVER_NAME $http_host;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
fastcgi_keep_conn on;
server {
listen 80;
listen [::]:80;
server_name exemplo.com.br www.exemplo.com.br;
root /var/www/html/exemplo.com.br/public_html;
index index.html;
set $skip_cache 0;
if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|^/feed/*|/tag/.*/feed/*|index.php|/.*sitemap.*\.(xml|xsl)") {
set $skip_cache 1;
}
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
# acesso por tcp
fastcgi_pass 127.0.0.1:9000;
# ou acesso por socket
#fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache WORDPRESS;
}
location ~ /purge(/.*) {
fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
access_log off;
}
location ~ /\.ht {
deny all;
}
}
