Cómo configurar FastCGI Caching en Nginx7 min read

FastCGI

Nginx incluye un módulo FastCGI que tiene directivas para el almacenamiento en memoria caché del contenido dinámico que se sirve desde el backend de PHP. Al configurar esto, se elimina la necesidad de soluciones adicionales de caché de páginas, como los proxies inversos (barnish) o los complementos específicos de la aplicación. El contenido también se puede excluir del almacenamiento en caché según el método de solicitud, la URL, las cookies o cualquier otra variable del servidor.

Habilitar el almacenamiento en caché de FastCGI

Este artículo asume que ya has instalado y configurado Nginx con PHP en tu servidor linux. Edita el archivo de configuración del Virtual Host para el que se debe habilitar el almacenamiento en caché.

Agregua las siguientes líneas a la parte superior del archivo fuera de la directiva del server {}:

La directiva “fastcgi cache path” especifica la ubicación de la memoria caché (/etc/nginx/cache), su tamaño (100 m), el nombre de la zona de memoria (MYAPP), los niveles del subdirectorio y el temporizador inactivo.

La ubicación puede estar en cualquier lugar del disco duro; sin embargo, el tamaño debe ser menor que la suma de memoria RAM + Swap o de lo contrario recibirá un error que dice “No se puede asignar memoria”. Veremos la opción “niveles” en la sección de purga: si no se accede a un caché durante un tiempo determinado especificado por la opción “inactive” (60 minutos), entonces Nginx lo elimina.

La directiva “fastcgi cache key” especifica cómo se codificarán los nombres de los archivos de caché. Nginx cifra un archivo al que se accede con MD5 según esta directiva.

A continuación, mueva la directiva de ubicación que pasa las solicitudes de PHP a php5-fpm. Dentro de “location ~ .php $ {}” agregua las siguientes líneas.

La directiva “fastcgi cache” hace referencia al nombre de la zona de memoria que especificamos en la directiva “fastcgi cache_path” y almacena la caché en esta área.

De forma predeterminada, Nginx almacena los objetos en caché durante un tiempo especificado por cualquiera de estos encabezados: X-Accel-Expires/Expires/Cache-Control.

La directiva “fastcgi cache valid” se utiliza para especificar la duración de caché predeterminada si faltan estos encabezados. En la declaración que ingresamos arriba, solo las respuestas con un código de estado de 200 se almacenan en caché. Otros códigos de respuesta también pueden ser especificados.

Prueba de configuración

Reinicia Nginx si todo está bien

El archivo vhost completo se verá así:

A continuación, haremos una prueba para ver si funciona el almacenamiento en caché.

Prueba de caché de FastCGI en tu VPS

Cree un archivo PHP que genere una marca de tiempo UNIX.

Insertar

Solicite este archivo varias veces usando curl o su navegador web.

Si el almacenamiento en caché funciona correctamente, debería ver la misma marca de tiempo en todas las solicitudes, ya que la respuesta se almacena en caché.

Haga una lista recursiva de la ubicación del caché para encontrar el caché de esta solicitud.

La convención de nomenclatura se explicará en la sección de purga.

También podemos hacer que Nginx agregue un encabezado “X-Cache” a la respuesta, indicando si se perdió la memoria caché o se presionó.

Agregue lo siguiente sobre la directiva del servidor {} :

Vuelva a cargar el servicio Nginx y realice una solicitud detallada con curl para ver el nuevo encabezado.

Establecer excepciones de caché

Algunos contenidos dinámicos, como las páginas de autenticación requeridas, no deben almacenarse en caché. Dicho contenido puede excluirse de la memoria caché en función de variables del servidor como “solicitud uri”, ” método de solicitud ” y “http_cookie”.

Aquí hay una configuración de muestra que debe usarse en el contexto del servidor {} .

Para aplicar la variable “$no_cache” a las directivas apropiadas, coloque las siguientes líneas dentro de la ubicación ~ .php $ {}

La directiva “fasctcgi cache bypass” ignora la memoria caché existente para las solicitudes relacionadas con las condiciones establecidas por nosotros anteriormente. La directiva “fastcgi no cache” no almacena en caché la solicitud si se cumplen las condiciones especificadas.

Purgando la caché

La convención de nomenclatura de la memoria caché se basa en las variables que establecemos para la directiva “fastcgi cache key”.

De acuerdo con estas variables, cuando solicitamos ” http: //localhost/time.php “, los siguientes valores serían los siguientes:

Pasar esta cadena a través del hash MD5 generaría la siguiente cadena:

Esto formará el nombre de archivo de la caché en cuanto a los subdirectorios que ingresamos “levels = 1: 2”. Por lo tanto, el primer nivel del directorio se nombrará con 1 carácter del último de esta cadena MD5 que es e; el segundo nivel tendrá los últimos 2 caracteres después del primer nivel, es decir, 18 . Por lo tanto, toda la estructura de directorios de este caché es la siguiente:

En base a este formato de nombres de caché, puede desarrollar un script de depuración en su idioma favorito. Para este tutorial, proporcionaré un script PHP simple que purga el caché de una URL POST ed.

Insertar

Envíe una solicitud POST a este archivo con la URL para purgar.

El script dará como resultado verdadero o falso en función de si el caché fue purgado o no. Asegúrese de excluir esta secuencia de comandos de la memoria caché y también restringir el acceso.

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas
4 votos