Servidores Web

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.

cache e expire no NGINX

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.



Editor iCloud

A edição do site icloud.com.br é feita pelo administrador do site. Criamos conteúdo para levar conhecimento aos nossos leitores.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Botão Voltar ao topo