Todos os produtos
Search
Central de documentação

:Configure uma política de cache do Apache

Última atualização: Jul 03, 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 requisições de rede desnecessárias, melhora a velocidade de carregamento das páginas e diminui a carga do servidor e o consumo de largura de banda.

Nota

Aviso: 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.

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, como immutable.

Sintaxe mais complexa que a do mod_expires.

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, certifique-se de que os módulos headers e expires estejam ativados no Apache.

  • Para verificar se os módulos estão carregados, execute o comando apachectl -M ou httpd -M. Verifique 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 configurar arquivos .htaccess. Como o Apache precisa ler e analisar o .htaccess a cada requisição, isso gera 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: Define o tempo de cache para um tipo específico de Multipurpose Internet Mail Extensions (MIME).

  • 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: 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: 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: Nome do campo de cabeçalho HTTP a ser operado, como Cache-Control ou Expires.

  • value: 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.

Validar e aplicar a configuração

Após modifique a configuração, verifique a sintaxe e recarregue o serviço de forma segura 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 recarregamento seguro).

    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

O módulo mod_expires

O módulo mod_expires define o campo Expires no cabeçalho de resposta HTTP para controlar por quanto tempo os navegadores armazenam recursos em cache. Configure corretamente o mod_expires pode melhorar o desempenho do seu site.

Descrição

A sintaxe básica do mod_expires é a seguinte:

<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 específico definido.

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

  • mime_type: Tipo MIME, como image/jpeg, image/gif, text/css ou text/html.

  • base_time: 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: Unidade de tempo, como:

    • seconds

    • minutes

    • hours

    • days

    • weeks

    • months

    • years

Exemplos de configuração

  1. Antes de usar o mod_expires, certifique-se de que o módulo esteja ativado no Apache. Verifique e ative o módulo com os seguintes comandos:

    # Check if mod_expires is enabled
    apachectl -M | grep expires
    
    # If not enabled, enable the module
    sudo a2enmod expires
    sudo systemctl restart apache2  # Restart the Apache service
  2. Defina um tempo de expiração de cache padrão global.

    <IfModule mod_expires.c>
        # Enable the mod_expires feature
        ExpiresActive On
        # Set the default cache time for all resources to 1 week
        ExpiresDefault "access plus 1 week"
    </IfModule>
  3. Defina o tempo de expiração do cache por tipo MIME.

    <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>
  4. Desative o cache para tipos específicos de recursos.

    <IfModule mod_expires.c>
        # Enable the mod_expires feature
        ExpiresActive On
        # Do not cache HTML files
        ExpiresByType text/html "access plus 0 seconds"
    </IfModule>
  5. Após modifique a configuração, reinicie o serviço Apache para que as alterações entrem em vigor. Use os seguintes comandos para reiniciar o serviço Apache:

    # Reload the Apache configuration (recommended)
    sudo systemctl reload apache2
    
    # Or restart the Apache service
    sudo systemctl restart apache2

    Para sistemas que não usam systemctl:

    # Reload the Apache configuration (recommended)
    sudo service apache2 reload
    
    # Or restart the Apache service
    sudo service apache2 restart
Nota

Prioridade: ExpiresByType tem precedência sobre ExpiresDefault. Se um recurso corresponder a uma regra ExpiresByType, a regra ExpiresDefault será ignorada.

O módulo mod_headers

O módulo mod_headers no Apache permite definir, modifique ou exclua cabeçalhos de requisição e resposta HTTP. Combine o mod_headers com políticas de cache do Apache, como Cache-Control e Expires, para crie políticas de cache flexíveis. Para obter mais informações, consulte o site oficial do Apache.

Descrição

A sintaxe básica do mod_headers é a seguinte:

<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: Nome do campo de cabeçalho HTTP a ser operado, como Cache-Control ou Expires.

  • value: Valor a ser definido.

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 arquivos .log.

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

A sintaxe básica do <FilesMatch> é a seguinte:

<FilesMatch "regular_expression"> </FilesMatch>
  • regular_expression: Expressão regular usada para corresponder a nomes de arquivos ou caminhos. Os padrões de correspondência comuns incluem:

    • \.(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.

Exemplos de configuração

  1. Antes de usar o mod_headers, certifique-se de que o módulo esteja ativado no Apache. Verifique e ative o módulo com os seguintes comandos:

    # Check if mod_headers is enabled
    apachectl -M | grep headers
    
    # If not enabled, enable the module
    sudo a2enmod headers
    sudo systemctl restart apache2  # Restart the Apache service
  2. Defina um tempo de expiração de cache padrão global.

    <IfModule mod_headers.c>
        # Set the Cache-Control header. The cache time is 1 day
        Header set Cache-Control "max-age=86400, public"
    </IfModule>
  3. Defina o tempo de expiração do cache por tipo de arquivo.

    <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>
  4. Desative o cache para tipos específicos de recursos.

    <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>
  5. Após modifique a configuração, reinicie o serviço Apache para que as alterações entrem em vigor. Use o seguinte comando para reiniciar o serviço Apache:

    # Reload Apache configuration (recommended).
    sudo systemctl reload apache2
    
    # Or restart the Apache service.
    sudo systemctl restart apache2

    Para sistemas que não usam systemctl:

    # Reload Apache configuration (recommended).
    sudo service apache2 reload
    
    # Or restart the Apache service.
    sudo service apache2 restart

Referência: Como funciona o cache da web

Compreender o cache da web ajuda a configure 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 requisiçã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 requisiçã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 continua então 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 configure o Apache, controle os seguintes cabeçalhos de resposta HTTP essenciais para sua política de cache:

Cabeçalhos de resposta HTTP relacionados ao cache

Cabeçalho de resposta

Descrição

Diretivas/valores comuns

Cache-Control

Introduzido no HTTP/1.1 para fornecer controle refinado 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 válido. Isso permite que o navegador evite enviar uma requisição condicional.

Expires

Um padrão HTTP/1.0 mais antigo que fornece um carimbo de data/hora 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 tag de entidade (ETag) é um identificador exclusivo gerado pelo servidor para um recurso, como um hash do conteúdo do arquivo. Um ETag é mais preciso 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