Todos los productos
Search
Centro de documentos

CDN:Configurar una directiva de caché de Apache

Última actualización: Sep 08, 2026

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.

Nota

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

mod_expires

Sintaxis sencilla. Establece rápidamente los tiempos de expiración para distintos tipos de archivo.

Funcionalidad limitada. No permite configurar directivas Cache-Control como no-store o immutable.

Definir una duración de caché simple (max-age) que indique a los navegadores o a la CDN cuánto tiempo reutilizar un archivo.

mod_headers

Ofrece control total sobre los encabezados HTTP y admite todas las directivas Cache-Control, como immutable.

Su sintaxis es más compleja que la de mod_expires.

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 -M o httpd -M. Compruebe que headers_module y expires_module aparezcan 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íneas LoadModule no 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 .htaccess en 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ódulo mod_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, como image/jpeg o text/html.

  • base_time: el tiempo base para la caché. Por lo general, es access (cuando el usuario accede al archivo) o modification (cuando se modificó el archivo por última vez).

  • time_unit: la unidad de tiempo, por ejemplo:

    • seconds

    • minutes

    • hours

    • days

    • weeks

    • months

    • years

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, como Cache-Control o Expires.

  • value: el valor que se va a establecer.

Introducción a <FilesMatch>

La directiva <FilesMatch> compara nombres de archivo o rutas mediante expresiones regulares. Esto le permite aplicar reglas de configuración específicas a los archivos coincidentes. Por ejemplo:

  • Establecer un tiempo de caché prolongado para archivos de imagen como .jpg o .png.

  • Impedir el acceso a archivos confidenciales como .htaccess o .log.

  • Agregar encabezados HTTP específicos para recursos estáticos, como archivos CSS y JS.

Sintaxis básica de <FilesMatch>:

<FilesMatch "regular_expression"> </FilesMatch>
  • regular_expression: se utiliza para comparar nombres de archivo o rutas. Patrones de coincidencia comunes:

    • \.(extension)$: coincide con archivos que tienen una extensión específica. Por ejemplo, \.(jpg|jpeg|png)$ coincide con todos los archivos .jpg, .jpeg y .png.

    • ^/path/: coincide con archivos dentro de una ruta específica.

    • .*: coincide con cualquier nombre de archivo.

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 -t

    • Debian/Ubuntu: sudo apache2ctl -t

    Si la salida es Syntax OK, puede continuar.

  • Aplique la configuración (se recomienda la recarga gradual).

    Use el comando reload para aplicar la nueva configuración sin interrumpir las conexiones existentes.

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

    • Debian/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-age en Cache-Control o por el encabezado Expires), el navegador carga el recurso desde su caché local sin comunicarse con el servidor. El código de estado HTTP suele ser 200 (from disk cache) o 200 (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:

    1. El navegador envía la solicitud con identificadores de caché en sus encabezados, como If-None-Match (con el valor ETag de la respuesta anterior) o If-Modified-Since (con la fecha Last-Modified de la respuesta anterior).

    2. El servidor compara estos identificadores con la versión actual del recurso.

    3. Si el recurso no cambió, el servidor devuelve un código de estado HTTP 304 Not Modified con un cuerpo de respuesta vacío. Luego, el navegador continúa usando su copia local obsoleta.

    4. Si el recurso se actualizó, el servidor devuelve un código de estado HTTP 200 OK junto con el nuevo contenido del recurso.

Al configurar Apache, usted puede controlar los siguientes encabezados de respuesta HTTP clave para su directiva de caché:

Encabezados de respuesta HTTP relacionados con la caché

Encabezado de respuesta

Descripción

Directivas o valores comunes

Cache-Control

Se introdujo en HTTP/1.1 para ofrecer un control detallado sobre el comportamiento de la caché. Tiene prioridad sobre Expires.

public: cualquier caché (navegador, CDN) puede almacenarlo.

private: solo el navegador del usuario final puede almacenarlo en la caché.

no-cache: fuerza la caché negociada. Debe validarse con el servidor en cada ocasión.

no-store: deshabilita por completo la caché. No almacena ninguna copia.

max-age=<seconds>: establece el periodo de validez de la caché fuerte en segundos.

s-maxage=<seconds>: un max-age específico para cachés compartidas, como una CDN.

must-revalidate: después de que la caché expira, debe validarse con el servidor de origen. No se puede usar una copia obsoleta.

immutable: indica que el cuerpo de la respuesta no cambiará mientras la caché esté vigente. Esto permite que el navegador omita el envío de una solicitud condicional.

Expires

Un estándar HTTP/1.0 más antiguo que proporciona una marca de tiempo de expiración absoluta. Este encabezado se ignora si Cache-Control: max-age está presente.

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

ETag

Una etiqueta de entidad (ETag) es un identificador único que el servidor genera para un recurso, como un hash del contenido del archivo. Un ETag es más preciso que Last-Modified.

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Last-Modified

La hora en que el recurso se modificó por última vez en el servidor. Es menos preciso (precisión a nivel de segundos) y puede resultar inexacto en algunos escenarios, por ejemplo, cuando los metadatos del archivo cambian pero el contenido no.

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