Todos os produtos
Search
Central de documentação

CDN:Configure uma política de cache do Apache

Última atualização: Sep 06, 2026

Configure uma política de cache da web no Apache permite que navegadores e proxies intermediários, como uma Content Delivery Network (CDN), reutilizem recursos já baixados. Isso reduz solicitações de rede desnecessárias, melhora a velocidade de carregamento da página e diminui a carga do servidor e o consumo de largura de banda.

Nota

Aviso legal: Este tópico pode conter informações sobre produtos de terceiros. A Alibaba Cloud não faz declarações ou garantias sobre o desempenho ou a confiabilidade de produtos de terceiros. Você é responsável por qualquer impacto potencial decorrente do uso desses produtos.

Escolha um módulo do Apache

Módulo do Apache

Vantagens

Desvantagens

Casos de uso

mod_expires

Sintaxe simples. Define rapidamente tempos de expiração para diferentes tipos de arquivo.

Funcionalidade limitada. Não permite definir diretivas Cache-Control como no-store ou immutable.

Ideal para definir uma duração de cache simples (max-age) que informa aos navegadores ou à CDN por quanto tempo reutilizar um arquivo.

mod_headers

Oferece controle total sobre os cabeçalhos HTTP, com suporte a todas as diretivas Cache-Control, incluindo immutable.

A sintaxe é mais complexa em comparação ao mod_expires.

Recomendado para ambientes de produção que exigem estratégias de cache abrangentes e detalhadas.

Procedimento

Ative os módulos

Antes de configurar uma política de cache, verifique se os módulos headers e expires estão ativados no Apache.

  • Para verificar se os módulos estão carregados, execute o comando apachectl -M ou httpd -M. Confirme se headers_module e expires_module aparecem na lista de saída.

  • Ative os módulos:

    • Para Debian/Ubuntu:

      sudo a2enmod headers expires
      sudo systemctl restart apache2
    • Para CentOS/RHEL/Alibaba Cloud Linux: Esses módulos geralmente são compilados ou carregados por padrão. Se estiverem ausentes, verifique os arquivos de configuração no diretório /etc/httpd/conf.modules.d/ . Certifique-se de que as linhas LoadModule não estejam comentadas.

Escolha o local do arquivo de configuração

Armazene as configurações de cache em um único arquivo ou no bloco VirtualHost do seu site.

  • Recomendado: Crie um novo arquivo, como cache.conf, no diretório /etc/httpd/conf.d/ para CentOS/RHEL ou no diretório /etc/apache2/conf-available/ para Debian/Ubuntu.

  • Não recomendado: Evite fazer configurações em arquivos .htaccess. Como o Apache precisa ler e analisar o .htaccess a cada solicitação, isso gera uma sobrecarga de desempenho desnecessária.

Exemplos de configuração

Defina um tempo de expiração de cache padrão global

mod_expires

<IfModule mod_expires.c>
    # Enable the mod_expires feature
    ExpiresActive On
    # Set the default cache time for all resources to 1 day
    ExpiresDefault "access plus 1 day"
</IfModule>

mod_headers

<IfModule mod_headers.c>
    # Set the Cache-Control header. The cache time is 1 day
    Header set Cache-Control "max-age=86400, public"
</IfModule>

Defina políticas de cache por tipo de arquivo

mod_expires

<IfModule mod_expires.c>
    # Enable the mod_expires feature
    ExpiresActive On

    # Set the default cache time to 1 day
    ExpiresDefault "access plus 1 day"

    # Cache image resources for 1 month
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/svg+xml "access plus 1 month"

    # Cache CSS and JS files for 1 week
    ExpiresByType text/css "access plus 1 week"
    ExpiresByType application/javascript "access plus 1 week"

    
</IfModule>

mod_headers

<IfModule mod_headers.c>
    # Cache image resources for 1 month
    <FilesMatch "\.(jpg|jpeg|png|gif|svg)$">
        Header set Cache-Control "max-age=2592000, public"
    </FilesMatch>

    # Cache CSS and JS files for 1 week
    <FilesMatch "\.(css|js)$">
        Header set Cache-Control "max-age=604800, public"
    </FilesMatch>
</IfModule>

Desative o cache para tipos específicos de recursos

mod_expires

<IfModule mod_expires.c>
    # Enable the mod_expires feature
    ExpiresActive On
    # Do not cache HTML files
    ExpiresByType text/html "access plus 0 seconds"
</IfModule>

mod_headers

<IfModule mod_headers.c>
    #  Disable caching for HTML files
    <FilesMatch "\.html$">
        Header set Cache-Control "no-store, no-cache, must-revalidate"
        Header set Pragma "no-cache"
        Header set Expires "0"
    </FilesMatch>
</IfModule>

Defina uma política de cache personalizada

Personalize uma política usando as seguintes regras de sintaxe do mod_expires e do mod_headers:

mod_expires

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "base_time plus time_unit"
    ExpiresByType mime_type "base_time plus time_unit"
</IfModule>
  • ExpiresActive On: Ativa o módulo mod_expires.

  • ExpiresDefault: Define o tempo de cache padrão para todos os recursos sem tipo definido.

  • ExpiresByType: Especifica o tempo de cache para um tipo MIME (Multipurpose Internet Mail Extensions) específico.

  • mime_type: Descreve o formato de um arquivo. Inclui um tipo principal e um subtipo, separados por uma barra, como image/jpeg ou text/html.

  • base_time: O tempo base para o cache. Geralmente é access (quando o usuário acessa o arquivo) ou modification (quando o arquivo foi modificado pela última vez).

  • time_unit: A unidade de tempo, como:

    • seconds

    • minutes

    • hours

    • days

    • weeks

    • months

    • years

mod_headers

<IfModule mod_headers.c>
    Header set|append|unset header_name "value"
</IfModule>
  • Header set: Define o valor do campo de cabeçalho HTTP especificado.

  • Header append: Adiciona conteúdo ao valor existente.

  • Header unset: Exclua o campo de cabeçalho HTTP especificado.

  • header_name: O nome do campo de cabeçalho HTTP a ser operado, como Cache-Control ou Expires.

  • value: O valor a ser definido.

Introdução ao <FilesMatch>

A diretiva <FilesMatch> corresponde a nomes de arquivos ou caminhos usando expressões regulares. Isso permite aplicar regras de configuração específicas aos arquivos correspondentes. Por exemplo:

  • Definir um longo tempo de cache para arquivos de imagem, como .jpg ou .png.

  • Impedir o acesso a arquivos sensíveis, como .htaccess ou .log.

  • Adicionar cabeçalhos HTTP específicos para recursos estáticos, como arquivos CSS e JS.

Sintaxe básica do <FilesMatch>:

<FilesMatch "regular_expression"> </FilesMatch>
  • regular_expression: Usada para corresponder a nomes de arquivos ou caminhos. Padrões de correspondência comuns:

    • \.(extension)$: Corresponde a arquivos com uma extensão específica. Por exemplo, \.(jpg|jpeg|png)$ corresponde a todos os arquivos .jpg, .jpeg e .png.

    • ^/path/: Corresponde a arquivos dentro de um caminho específico.

    • .*: Corresponde a qualquer nome de arquivo.

Valide e aplique a configuração

Após modificar a configuração, verifique a sintaxe e recarregue o service de forma graceful para evitar interrupções.

  • Verifique a sintaxe da configuração. Antes de aplicar alterações, execute um comando de verificação de sintaxe para garantir que não haja erros.

    • CentOS/RHEL/Alibaba Cloud Linux: sudo httpd -t

    • Debian/Ubuntu: sudo apache2ctl -t

    Se a saída for Syntax OK, prossiga.

  • Aplique a configuração (recomenda-se o reload graceful).

    Use o comando reload para aplicar a nova configuração sem encerrar as conexões existentes.

    • CentOS/RHEL/Alibaba Cloud Linux: sudo systemctl reload httpd

    • Debian/Ubuntu: sudo systemctl reload apache2

Referência: Como funciona o cache da web

Compreender o cache da web ajuda a configurar corretamente o Apache. O cache da web divide-se em dois tipos principais: cache forte e cache negociado:

  • Cache forte: Quando um navegador solicita um recurso, ele verifica primeiro seu cache local. Se o cache não estiver expirado (determinado pela diretiva max-age em Cache-Control ou pelo cabeçalho Expires), o navegador carrega o recurso do cache local sem entrar em contato com o servidor. O código de status HTTP é tipicamente 200 (from disk cache) ou 200 (from memory cache). Este é o método de cache mais eficiente.

  • Cache negociado: Quando um cache forte é inválido (expirado) ou não está definido, o navegador envia uma solicitação condicional ao servidor para verificar se sua versão em cache ainda é válida. Esse processo envolve as seguintes etapas:

    1. O navegador envia a solicitação com identificadores de cache em seus cabeçalhos, como If-None-Match (com o valor ETag da resposta anterior) ou If-Modified-Since (com a data Last-Modified da resposta anterior).

    2. O servidor compara esses identificadores com a versão atual do recurso.

    3. Se o recurso não tiver sido alterado, o servidor retorna um código de status HTTP 304 Not Modified com um corpo de resposta vazio. O navegador então continua a usar sua cópia local obsoleta.

    4. Se o recurso tiver sido atualizado, o servidor retorna um código de status HTTP 200 OK junto com o novo conteúdo do recurso.

Ao configurar o Apache, controle os seguintes cabeçalhos de resposta HTTP essenciais para sua política de cache:

Cabeçalhos de resposta HTTP relacionados a cache

Cabeçalho de resposta

Descrição

Diretivas/valores comuns

Cache-Control

Introduzido no HTTP/1.1 para fornecer controle granular sobre o comportamento de cache. Tem precedência sobre Expires.

public: Pode ser armazenado por qualquer cache (navegador, CDN).

private: Só pode ser armazenado em cache pelo navegador do usuário final.

no-cache: Força o cache negociado. Deve validar com o servidor todas as vezes.

no-store: Desativa completamente o cache. Não armazena nenhuma cópia.

max-age=<seconds>: Define o período de validade para cache forte em segundos.

s-maxage=<seconds>: Um max-age especificamente para caches compartilhados, como uma CDN.

must-revalidate: Após a expiração do cache, ele deve ser validado com o servidor de origem. Uma cópia obsoleta não pode ser usada.

immutable: Indica que o corpo da resposta não mudará enquanto o cache estiver fresco. Isso permite que o navegador evite enviar uma solicitação condicional.

Expires

Um padrão HTTP/1.0 mais antigo que fornece um timestamp de expiração absoluto. Este cabeçalho é ignorado se Cache-Control: max-age estiver presente.

Expires: Wed, 21 Oct 2025 07:28:00 GMT

ETag

Uma entity tag (ETag) é um identificador exclusivo gerado pelo servidor para um recurso, como um hash do conteúdo do arquivo. Uma ETag é mais precisa que Last-Modified.

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Last-Modified

A hora em que o recurso foi modificado pela última vez no servidor. É menos preciso (precisão de nível de segundo) e pode ser impreciso em alguns cenários, como quando os metadados do arquivo mudam, mas o conteúdo não.

Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT