Como Configurar Cache e Expire no NGINX no AlmaLinux
Aprenda a configurar diretivas de cache e expire no NGINX no servidor AlmaLinux. Guia completo com códigos, diretórios e otimização de performance web.

A configuração adequada de cache e expire no NGINX é fundamental para otimizar a performance de sites e aplicações web em servidores AlmaLinux. Essas diretivas reduzem significativamente o tempo de carregamento das páginas e diminuem a carga no servidor, proporcionando uma melhor experiência do usuário e economia de recursos.
Neste guia completo, você aprenderá como implementar as diretivas de cache e expire no NGINX rodando em AlmaLinux, incluindo configurações avançadas, códigos práticos e as melhores práticas para maximizar a performance do seu servidor web.
O que são Cache e Expire no NGINX?
O cache e expire para o NGINX são mecanismos que controlam como e por quanto tempo os recursos são armazenados tanto no servidor quanto no navegador do cliente:
- Cache: Armazena temporariamente arquivos estáticos para servir requisições futuras mais rapidamente
- Expire: Define por quanto tempo os recursos devem permanecer válidos antes de serem renovados
Configurando Cache e Expire no NGINX (AlmaLinux)
1. Localizando os Arquivos de Configuração
No AlmaLinux, os arquivos de configuração do NGINX estão localizados em:
# Arquivo principal de configuração
/etc/nginx/nginx.conf
# Configurações de sites
/etc/nginx/conf.d/
/etc/nginx/sites-available/
/etc/nginx/sites-enabled/
# Logs
/var/log/nginx/
2. Configuração Básica de Cache
Edite o arquivo de configuração do seu site:
sudo nano /etc/nginx/conf.d/default.conf
Adicione as seguintes diretivas de cache e expire no NGINX:
server {
listen 80;
server_name exemplo.com www.exemplo.com;
root /var/www/html;
index index.html index.php;
# Configuração de cache para arquivos estáticos
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Pragma public;
add_header Vary Accept-Encoding;
access_log off;
}
# Cache para arquivos HTML
location ~* \.(html|htm)$ {
expires 1h;
add_header Cache-Control "public, must-revalidate";
}
# Cache para fontes
location ~* \.(woff|woff2|ttf|eot|svg)$ {
expires 1y;
add_header Cache-Control "public";
add_header Access-Control-Allow-Origin "*";
}
}
3. Configuração Avançada com Proxy Cache
Para aplicações dinâmicas, configure o proxy cache:
# Adicione no bloco http do /etc/nginx/nginx.conf
http {
# Definindo zona de cache
proxy_cache_path /var/cache/nginx/proxy
levels=1:2
keys_zone=app_cache:10m
max_size=1g
inactive=60m
use_temp_path=off;
# Configurações globais de cache
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_background_update on;
}
Configuração do servidor com proxy cache:
server {
listen 80;
server_name app.exemplo.com;
location / {
proxy_pass http://localhost:3000;
proxy_cache app_cache;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
# Headers de cache
add_header X-Proxy-Cache $upstream_cache_status;
add_header Cache-Control "public, max-age=600";
# Headers de proxy
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
4. Criando Diretórios de Cache
Execute os comandos para criar e configurar os diretórios:
# Criar diretório de cache
sudo mkdir -p /var/cache/nginx/proxy
# Definir permissões corretas
sudo chown -R nginx:nginx /var/cache/nginx/
sudo chmod -R 755 /var/cache/nginx/
# Verificar se o usuário nginx existe
id nginx
5. Configuração de Cache para Diferentes Tipos de Arquivo
# Cache longo para recursos estáticos
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Pragma public;
etag off;
if_modified_since off;
add_header Last-Modified "";
}
# Cache médio para conteúdo semi-estático
location ~* \.(pdf|doc|docx|xls|xlsx|ppt|pptx)$ {
expires 1M;
add_header Cache-Control "public, must-revalidate";
}
# Cache curto para páginas HTML
location ~* \.(html|htm)$ {
expires 1h;
add_header Cache-Control "public, must-revalidate";
etag on;
}
# Sem cache para conteúdo dinâmico
location ~* \.(php|asp|aspx|jsp)$ {
expires -1;
add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Pragma "no-cache";
}
6. Testando e Aplicando as Configurações
# Testar configuração
sudo nginx -t
# Recarregar NGINX
sudo systemctl reload nginx
# Verificar status
sudo systemctl status nginx
# Monitorar logs
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
Monitoramento e Otimização
1. Verificando Headers de Cache
# Testar headers de cache
curl -I http://seu-site.com/style.css
# Verificar cache do proxy
curl -I http://seu-site.com/ | grep -i cache
2. Script para Limpeza de Cache
Crie um script para limpar o cache quando necessário:
sudo nano /usr/local/bin/clear-nginx-cache.sh
#!/bin/bash
# Script para limpar cache do NGINX
echo "Limpando cache do NGINX..."
sudo rm -rf /var/cache/nginx/proxy/*
sudo systemctl reload nginx
echo "Cache limpo com sucesso!"
# Tornar executável
sudo chmod +x /usr/local/bin/clear-nginx-cache.sh
Vantagens e Desvantagens
Vantagens
- Performance Superior: Redução drástica no tempo de carregamento das páginas
- Menor Uso de Banda: Arquivos em cache reduzem transferência de dados
- Redução de Carga do Servidor: Menos processamento e consultas ao banco de dados
- Melhor Experiência do Usuário: Navegação mais rápida e responsiva
- Economia de Recursos: Menor consumo de CPU e memória
- SEO Melhorado: Velocidade de carregamento é fator de ranking no Google
- Escalabilidade: Capacidade de atender mais usuários simultâneos
Desvantagens
- Conteúdo Desatualizado: Pode servir versões antigas de arquivos
- Complexidade de Configuração: Requer conhecimento técnico para otimização
- Uso de Disco: Cache ocupa espaço em disco
- Debugging Complicado: Problemas podem ser mascarados pelo cache
- Invalidação Manual: Necessidade de limpar cache em atualizações
- Configuração por Tipo: Diferentes arquivos precisam de configurações específicas
Conclusão
A implementação de cache e expire no NGINX no AlmaLinux é uma estratégia essencial para otimizar a performance de aplicações web. Com as configurações apresentadas neste guia, você pode reduzir significativamente o tempo de carregamento das páginas, diminuir a carga do servidor e proporcionar uma melhor experiência aos usuários.
Lembre-se de monitorar regularmente o comportamento do cache, ajustar os tempos de expiração conforme necessário e manter um equilíbrio entre performance e atualização de conteúdo. A configuração adequada de cache é um investimento que trará benefícios duradouros para sua aplicação web.
Perguntas Frequentes
1. Como verificar se o cache e expire estão funcionando no NGINX?
Use o comando curl -I http://seu-site.com/arquivo.css
para verificar os headers de cache. Procure por headers como Cache-Control
, Expires
e ETag
. Você também pode usar ferramentas como Google PageSpeed Insights ou GTmetrix para análise completa.
2. Qual é o melhor tempo de cache para diferentes tipos de arquivo?
Para arquivos CSS/JS: 1 ano, imagens: 1 ano, páginas HTML: 1 hora, arquivos PDF: 1 mês, e conteúdo dinâmico: sem cache. Ajuste conforme a frequência de atualizações do seu site.
3. Como limpar o cache do NGINX quando atualizo o site?
Execute sudo rm -rf /var/cache/nginx/*
seguido de sudo systemctl reload nginx
. Para automação, crie um script que limpe o cache automaticamente durante deployments.
4. O cache afeta o consumo de memória e disco do servidor?
Sim, o cache utiliza espaço em disco e memória RAM. Configure limites adequados com as diretivas max_size
e monitore o uso de recursos regularmente com du -sh /var/cache/nginx/
.
5. Como configurar cache apenas para usuários não logados?
Use a diretiva proxy_cache_bypass
com uma variável que detecte usuários logados: proxy_cache_bypass $cookie_user_session;
onde user_session
é o nome do cookie de sessão.
6. É possível ter diferentes configurações de cache por diretório?
Sim, use blocos location
específicos para diferentes diretórios. Por exemplo, configure cache longo para /assets/
e cache curto para /admin/
usando diretivas location
separadas.
7. Como monitorar a eficiência do cache no NGINX?
Adicione o header add_header X-Cache-Status $upstream_cache_status;
e monitore os logs. Use também ferramentas como nginx-status
e analise métricas de hit/miss ratio do cache.
8. O que fazer quando o cache não está sendo respeitado pelos navegadores?
Verifique se não há conflitos com headers Pragma: no-cache
ou Cache-Control: no-cache
. Certifique-se de que os headers Expires
e Last-Modified
estão configurados corretamente.
9. Como configurar cache para APIs RESTful no NGINX?
Para APIs, use cache seletivo baseado em métodos HTTP: proxy_cache_methods GET HEAD;
e configure tempos curtos para endpoints dinâmicos e longos para dados estáticos como listas de categorias.
10. Qual é o impacto do cache na segurança do servidor?
O cache pode mascarar atualizações de segurança. Implemente uma estratégia de invalidação rápida para patches críticos e evite fazer cache de conteúdo sensível ou páginas autenticadas.