GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo almacenar en caché archivos estáticos en nginx

Este tutorial explica cómo puede configurar nginx para configurar el encabezado HTTP Expires y la directiva max-age del encabezado HTTP Cache-Control de archivos estáticos (como imágenes, archivos CSS y Javascript) a una fecha en el futuro para que estos archivos serán almacenados en caché por los navegadores de sus visitantes. Esto ahorra ancho de banda y hace que su sitio web aparezca más rápido (si un usuario visita su sitio por segunda vez, los archivos estáticos se recuperarán del caché del navegador).

1 nota preliminar

Supongo que tiene una configuración de nginx que funciona, p. como se muestra en este tutorial: Instalación de Nginx con PHP 7 y MySQL 5.7 (LEMP) en Ubuntu 16.04 LTS

2 Configuración de nginx

El encabezado HTTP Expires se puede configurar con la ayuda de la directiva expires que se puede colocar dentro de http {}, servidor {}, ubicación {} o una declaración if dentro de un bloque de ubicación {}. Por lo general, lo usará en un bloque de ubicación para sus archivos estáticos, p. de la siguiente manera:

location ~*  \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}

En el ejemplo anterior, todos los archivos .jpg, .jpeg, .png, .gif, .ico, .css y .js obtienen un encabezado Expires con una fecha de 365 días en el futuro a partir de la hora de acceso del navegador. Por lo tanto, debe asegurarse de que el bloque de ubicación {} realmente solo contenga archivos estáticos que los navegadores puedan almacenar en caché.

Vuelva a cargar nginx después de sus cambios:

/etc/init.d/nginx reload

Puede usar la siguiente configuración de tiempo con la directiva expires:

  • off hace que los encabezados Expires y Cache-Control no se modifiquen.
  • epoch establece el encabezado Expires en el 1 de enero de 1970 00:00:01 GMT.
  • max establece el encabezado Expires en 31 de diciembre de 2037 a las 23:59:59 GMT y Cache-Control max-age en 10 años.
  • Un tiempo sin un prefijo @ significa un tiempo de caducidad relativo al tiempo de acceso al navegador. Se puede especificar un tiempo negativo, lo que establece el encabezado Cache-Control en no-cache. Ejemplo:expira 10d; o caduca 14w3d;
  • Una hora con un prefijo @ especifica una fecha de caducidad absoluta, escrita en la forma Hh o Hh:Mm, donde H varía de 0 a 24 y M de 0 a 59. Ejemplo:expira @ 15:34;

Puede utilizar las siguientes unidades de tiempo:

  • ms:milisegundos
  • s:segundos
  • m:minutos
  • h:horas
  • d:días
  • w:semanas
  • M:meses (30 días)
  • y:años (365 días)

Ejemplos:1h30m por una hora treinta minutos, 1y6M por un año y seis meses.

También tenga en cuenta que si usa un encabezado Expires futuro lejano, debe cambiar el nombre de archivo del componente cada vez que cambia el componente. Por lo tanto, es una buena idea versionar sus archivos. Por ejemplo, si tiene un archivo javascript.js y desea modificarlo, debe agregar un número de versión al nombre del archivo modificado (por ejemplo, javascript-1.1.js) para que los navegadores tengan que descargarlo. Si no cambia el nombre del archivo, los navegadores cargarán el archivo (antiguo) desde su caché.

En lugar de basar el encabezado Expires en el tiempo de acceso del navegador (por ejemplo, expires 10d;), también puede basarlo en la fecha de modificación de un archivo (¡tenga en cuenta que esto solo funciona para archivos reales que están almacenados en el disco duro! ) utilizando la palabra clave modificada que precede a la hora:

expires modified 10d;

3 Pruebas

Para probar si su configuración funciona, puede usar la función de análisis de red de las herramientas de desarrollador en el navegador Firefox y acceder a un archivo estático a través de Firefox (por ejemplo, una imagen). En la salida del encabezado, ahora debería ver un encabezado Expires y un encabezado Cache-Control con una directiva max-age (max-age contiene un valor en segundos, por ejemplo, 31536000 es un año en el futuro):

4 Enlaces

  • Nginx HttpHeadersModule:http://wiki.nginx.org/HttpHeadersModule

Sobre el autor

Falko Timme es el propietario de Timme Hosting (alojamiento web nginx ultrarrápido). Es el mantenedor principal de HowtoForge (desde 2005) y uno de los principales desarrolladores de ISPConfig (desde 2000). También ha contribuido al libro de O'Reilly "Administración del sistema Linux".


Linux
  1. Cómo usar Nginx para redirigir

  2. nginx - 413 Entidad de solicitud demasiado grande

  3. Cómo deshabilitar ETag en NGINX

  4. Cómo habilitar HTTP2 en NGINX

  5. Cómo eliminar millones de archivos sin molestar al servidor

Cómo configurar Nginx Cache en un servidor LAMP

Cómo configurar la caché de Nginx en el servidor LEMP

¿Cómo instalar Nginx en CentOS 7?

Cómo instalar NGINX en Ubuntu 18.04

Cómo encontrar archivos en Debian

Cómo limpiar archivos innecesarios