Configurar el modulo mod_expires de Apache

Actualizado el domingo, 5 noviembre, 2017

Configurar el modulo mod_expires de Apache. Mod_expires es un módulo que se ejecuta en un servidor web Apache. Permite manipular los encabezados de control de caché, de manera que podamos aprovechar la caché del navegador cliente. Por lo tanto podemos establecer los valores de cuánto tiempo la imagen será almacenada por el navegador.

Como ves es un modulo de apache indispensable. Mejoraras en gran medida los tiempos de carga de un mismo cliente. Si los archivos no son modificados frecuentemente debes subir el tiempo, cuanto más largo, más ahorro, por tanto más velocidad. Si quieres más información sobre el modulo mod_expires, puedes leer la documentación oficial en el sitio de Apache

Comenzamos.

 

Verificamos que el modulo mod_expires este cargado y trabajando

Abrimos la consola terminal y escribimos:

httpd -M 2>&1|grep expires

Dependiendo de tu sistema, puedes tener dos respuestas diferentes. Las dos son validas y verifican que el modulo esta cargado y corriendo.

Ejemplo de salidas:

# Salida 1
expires_module (shared)

# Salida 2
expires_module (static)

Si no devuelve nada, quiere decir que tu modulo no esta cargado, de todas formas puedes revisar los módulos cargados, con:

Centos:

apachectl -t -D DUMP_MODULES

Debian:
apache2ctl -t -D DUMP_MODULES

Ejemplo de salida:
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 access_compat_module (shared)
 actions_module (shared)
 alias_module (shared)
 allowmethods_module (shared)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authn_anon_module (shared)
 authn_core_module (shared)
 authn_dbd_module (shared)
 authn_dbm_module (shared)
 authn_file_module (shared)
 authn_socache_module (shared)
 authz_core_module (shared)
 authz_dbd_module (shared)
 authz_dbm_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_owner_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cache_module (shared)
 cache_disk_module (shared)
 data_module (shared)
 dbd_module (shared)
 deflate_module (shared)
 dir_module (shared)
 dumpio_module (shared)
 echo_module (shared)
 env_module (shared)
 expires_module (shared) <<--------- Modulo cargado
 ext_filter_module (shared)
 filter_module (shared)
 headers_module (shared)
 include_module (shared)
 info_module (shared)
 log_config_module (shared)
 logio_module (shared)
 mime_magic_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 remoteip_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 slotmem_plain_module (shared)
 slotmem_shm_module (shared)
 socache_dbm_module (shared)
 socache_memcache_module (shared)
 socache_shmcb_module (shared)
 status_module (shared)
 substitute_module (shared)
 suexec_module (shared)
 unique_id_module (shared)
 unixd_module (shared)
 userdir_module (shared)
 version_module (shared)
 vhost_alias_module (shared)
 mpm_prefork_module (shared)
 ssl_module (shared)
 systemd_module (shared)
 cgi_module (shared)
 fcgid_module (shared)
 ruid2_module (shared)
 php5_module (shared)

Si no lo tienes activo, accede a los módulos de apache y lo descomentas.

Configurar el modulo mod_expires de Apache 1

Configurar el modulo mod_expires

Lo puedes configurar directamente en la estrofa de Apache vhost, pero mucho mejor (más que nada para que no intervenga en algún otro dominio que tengas en tu servidor) en el archivo .htaccess (te recomiendo revisar está completa guía de .htaccess).

Configura según tus necesidades, yo tan solo pongo unos ejemplos.

<IfModule mod_expires.c>
# Enable expirations
ExpiresActive On
# Default directive
ExpiresDefault "access plus 1 month"
# My favicon
ExpiresByType image/x-icon "access plus 1 year"
# Images
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
# CSS
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/html "access plus 1 month"
# Javascript
ExpiresByType text/javascript "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
</IfModule>

<IfModule mod_expires.c>
# Turn on the module.
ExpiresActive on
# Set the default expiry times.
ExpiresDefault "access plus 2 days"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType text/css "now plus 1 month"
ExpiresByType image/ico "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType text/html "access plus 600 seconds"
</IfModule>

Una vez configurado y guardado, debes reiniciar apache.
service httpd restart
service apache2 restart

 

Comprobar que el modulo mod_expires funciona correctamente

La forma más rápida y sencilla de comprobar que funciona correctamente, es hacer un curl a la url de una imagen de nuestra web (imagen o el tipo de archivo que desees).

curl -Is url-a-comprobar-incluido-http

Ejemplo:
[root@host ~]# curl -Is https://www.sololinux.es/wp-content/uploads/2016/08/1-logo-sololinux-300x85.png
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 10 Oct 2017 04:30:01 GMT
Content-Type: image/png
Content-Length: 5664
Last-Modified: Mon, 14 Aug 2017 05:29:36 GMT
Connection: keep-alive
Keep-Alive: timeout=60
ETag: "59913540-1620"
Expires: Thu, 31 Dec 2037 23:55:55 GMT  <<-------Funcionando correctamente.
Cache-Control: max-age=315360000
Accept-Ranges: bytes

Como ves funciona a la perfección.

Agregar comentario