Configurar una directiva de caché web en Apache permite que los navegadores y los proxies intermedios, como una red de entrega de contenido (CDN), reutilicen los recursos descargados. Esto reduce las solicitudes de red innecesarias, mejora la velocidad de carga de la página y disminuye la carga del servidor y el consumo de ancho de banda.
Aviso legal: Este tema puede contener información sobre productos de terceros. Alibaba Cloud no ofrece ninguna garantía ni declaración sobre el rendimiento o la confiabilidad de los productos de terceros. Usted es responsable de cualquier impacto potencial derivado del uso de estos productos.
Elija un módulo de Apache
|
Módulo de Apache |
Ventajas |
Desventajas |
Casos de uso |
|
|
Sintaxis sencilla. Establece rápidamente los tiempos de expiración para distintos tipos de archivo. |
Funcionalidad limitada. No permite configurar directivas |
Definir una duración de caché simple ( |
|
|
Ofrece control total sobre los encabezados HTTP y admite todas las directivas |
Su sintaxis es más compleja que la de |
Entornos de producción que requieren estrategias de caché detalladas y completas. |
Procedimiento
Habilite los módulos
Antes de configurar una directiva de caché, asegúrese de que los módulos headers y expires estén habilitados en Apache.
Para comprobar si los módulos están cargados, ejecute el comando
apachectl -Mohttpd -M. Compruebe queheaders_moduleyexpires_moduleaparezcan en la lista de salida.-
Habilite los módulos:
-
Para Debian/Ubuntu:
sudo a2enmod headers expires sudo systemctl restart apache2 Para CentOS/RHEL/Alibaba Cloud Linux: por lo general, estos módulos se compilan o se cargan de forma predeterminada. Si no están presentes, revise los archivos de configuración en el directorio
/etc/httpd/conf.modules.d/. Asegúrese de que las líneasLoadModuleno estén comentadas.
-
Elija la ubicación del archivo de configuración
Puede almacenar las configuraciones de caché en un solo archivo o dentro del bloque VirtualHost de su sitio.
Recomendado: cree un archivo nuevo, como
cache.conf, en el directorio/etc/httpd/conf.d/para CentOS/RHEL o en el directorio/etc/apache2/conf-available/para Debian/Ubuntu.No recomendado: evite aplicar configuraciones en archivos
.htaccess. Dado que Apache debe leer y analizar.htaccessen cada solicitud, esto genera una sobrecarga de rendimiento innecesaria.
Ejemplos de configuración
Establezca un tiempo de expiración de caché predeterminado 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>
Configure directivas de caché por tipo de archivo
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>
Deshabilite la caché para tipos de recursos específicos
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 una directiva de caché personalizada
Personalice una directiva con las siguientes reglas de sintaxis de mod_expires y 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: habilita el módulomod_expires.ExpiresDefault: establece el tiempo de caché predeterminado para todos los recursos sin un tipo definido.ExpiresByType: define el tiempo de caché para un tipo específico de Multipurpose Internet Mail Extensions (MIME).mime_type: describe el formato de un archivo. Incluye un tipo principal y un subtipo separados por una barra diagonal, comoimage/jpegotext/html.base_time: el tiempo base para la caché. Por lo general, esaccess(cuando el usuario accede al archivo) omodification(cuando se modificó el archivo por última vez).-
time_unit: la unidad de tiempo, por ejemplo:secondsminuteshoursdaysweeksmonthsyears
mod_headers
<IfModule mod_headers.c>
Header set|append|unset header_name "value"
</IfModule>
Header set: establece el valor del campo de encabezado HTTP especificado.Header append: agrega contenido al valor existente.Header unset: elimina el campo de encabezado HTTP especificado.header_name: el nombre del campo de encabezado HTTP sobre el cual se opera, comoCache-ControloExpires.value: el valor que se va a establecer.
Valide y aplique la configuración
Después de modificar la configuración, compruebe la sintaxis y luego recargue el servicio de forma gradual para evitar interrupciones.
-
Compruebe la sintaxis de la configuración. Antes de aplicar los cambios, ejecute un comando de verificación de sintaxis para asegurarse de que no haya errores.
CentOS/RHEL/Alibaba Cloud Linux:
sudo httpd -tDebian/Ubuntu:
sudo apache2ctl -t
Si la salida es
Syntax OK, puede continuar. -
Aplique la configuración (se recomienda la recarga gradual).
Use el comando
reloadpara aplicar la nueva configuración sin interrumpir las conexiones existentes.CentOS/RHEL/Alibaba Cloud Linux:
sudo systemctl reload httpdDebian/Ubuntu:
sudo systemctl reload apache2
Referencia: cómo funciona la caché web
Comprender el funcionamiento de la caché web le ayuda a configurar Apache correctamente. La caché web se divide en dos tipos principales: caché fuerte y caché negociada:
Caché fuerte: cuando un navegador solicita un recurso, primero comprueba su caché local. Si la caché no ha expirado (determinado por la directiva
max-ageenCache-Controlo por el encabezadoExpires), el navegador carga el recurso desde su caché local sin comunicarse con el servidor. El código de estado HTTP suele ser200 (from disk cache)o200 (from memory cache). Este es el método de almacenamiento en caché más eficiente.-
Caché negociada: cuando una caché fuerte no es válida (expiró) o no está configurada, el navegador envía una solicitud condicional al servidor para comprobar si su versión almacenada sigue siendo válida. Este proceso incluye los siguientes pasos:
El navegador envía la solicitud con identificadores de caché en sus encabezados, como
If-None-Match(con el valorETagde la respuesta anterior) oIf-Modified-Since(con la fechaLast-Modifiedde la respuesta anterior).El servidor compara estos identificadores con la versión actual del recurso.
Si el recurso no cambió, el servidor devuelve un código de estado HTTP
304 Not Modifiedcon un cuerpo de respuesta vacío. Luego, el navegador continúa usando su copia local obsoleta.Si el recurso se actualizó, el servidor devuelve un código de estado HTTP
200 OKjunto con el nuevo contenido del recurso.
Al configurar Apache, usted puede controlar los siguientes encabezados de respuesta HTTP clave para su directiva de caché: