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.
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 |
Ideal para definir uma duração de cache simples ( |
|
mod_headers |
Oferece controle total sobre os cabeçalhos HTTP, com suporte a todas as diretivas |
A sintaxe é mais complexa em comparação ao |
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 -Mouhttpd -M. Confirme seheaders_moduleeexpires_moduleaparecem 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 linhasLoadModulenã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.htaccessa 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/jpegoutext/html.base_time: O tempo base para o cache. Geralmente é
access(quando o usuário acessa o arquivo) oumodification(quando o arquivo foi modificado pela última vez).-
time_unit: A unidade de tempo, como:
secondsminuteshoursdaysweeksmonthsyears
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-ControlouExpires.value: O valor a ser definido.
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 -tDebian/Ubuntu:
sudo apache2ctl -t
Se a saída for
Syntax OK, prossiga. -
Aplique a configuração (recomenda-se o reload graceful).
Use o comando
reloadpara aplicar a nova configuração sem encerrar as conexões existentes.CentOS/RHEL/Alibaba Cloud Linux:
sudo systemctl reload httpdDebian/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-ageemCache-Controlou pelo cabeçalhoExpires), o navegador carrega o recurso do cache local sem entrar em contato com o servidor. O código de status HTTP é tipicamente200 (from disk cache)ou200 (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:
O navegador envia a solicitação com identificadores de cache em seus cabeçalhos, como
If-None-Match(com o valorETagda resposta anterior) ouIf-Modified-Since(com a dataLast-Modifiedda resposta anterior).O servidor compara esses identificadores com a versão atual do recurso.
Se o recurso não tiver sido alterado, o servidor retorna um código de status HTTP
304 Not Modifiedcom um corpo de resposta vazio. O navegador então continua a usar sua cópia local obsoleta.Se o recurso tiver sido atualizado, o servidor retorna um código de status HTTP
200 OKjunto 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: