Cómo habilitar el almacenamiento en caché FastCGI del lado del servidor con Nginx y PHP

Nginx es un servidor web de código abierto y de alto rendimiento que se puede utilizar para acelerar la entrega de contenido y aplicaciones. Nginx mejora la seguridad, mejora la escalabilidad y también se puede usar como un balanceador de carga de alta disponibilidad. Se puede usar como un proxy inverso y uno de los usos más importantes de Nginx es el almacenamiento en caché de contenido. Uno de los mejores enfoques es usar Nginx como almacenamiento en caché de contenido. En este artículo, analizaremos el almacenamiento en caché de contenido Nginx FastCGI para un mejor rendimiento de los sitios web.

Habilitación del almacenamiento en caché FastCGI en Nginx

En este artículo, asumimos que ya instaló Nginx con PHP en su máquina Linux.

Para comenzar a habilitar el almacenamiento en caché FastCGI, edite el archivo de configuración del host virtual en el que se habilitará el almacenamiento en caché.

$ cd /etc/nginx/conf.d
$ vi example.conf

Agregue el siguiente contenido en la parte superior del archivo. Recuerde que las líneas deben estar fuera del servidor {} directiva.

fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

Donde,

  • fastcgi_cache_path – ubicación del caché
  • niveles – nivel de jerarquía de caché, establece una jerarquía de directorios de dos niveles en /etc/nginx/cache
  • zona_llaves – nombre de la zona de memoria (En este example He usado MYAPP. Puedes tener tu propia preferencia)
  • inactivo – especifica el tiempo después del cual los datos almacenados en caché a los que no se accede durante el tiempo especificado se eliminan del caché. En esto exampleel tiempo inactivo se establece en 60 m, que se puede aumentar o disminuir.
  • fastcgi_cache_key – Especifica cómo se codificarán los nombres de archivo de caché

Variables utilizadas en factcgi_cache_key

  • $esquema – esquema de solicitud HTTPS o HTTP
  • $request_method – especifica los métodos de solicitud como GET o POST
  • $anfitrión – Nombre del servidor que coincide con la solicitud
  • $solicitud_uri – URI de solicitud completa

La ubicación del archivo de caché puede estar en cualquier parte del disco duro, pero el tamaño debe ser menor que la RAM+swap del sistema para evitar el problema “No se puede asignar memoria”.

Ahora vaya a la directiva de ubicación donde se pasa la solicitud de PHP a php-fpm. Dentro de “ubicación ~ .php$ {}” agregue las siguientes líneas

fastcgi_cache MYAPP;
fastcgi_cache_valid 200 1m;

Donde MYAPP es el nombre de la zona de memoria y fastcgi_cache_valid 200 almacena en caché todas las respuestas HTTP 200.

Si solo se define el tiempo, se almacenan en caché las respuestas 200, 301 y 302.

Ejecute el siguiente comando para probar la configuración de vhost de Nginx.

$ nginx -t

Probar la sintaxis de configuración de nginx

Ahora reinicie el servicio Nginx.

$ systemctl restart nginx

Un archivo de configuración completo de vhost parece

fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

server {
  listen 80;
  root /usr/share/nginx/html;
  index index.php index.html index.htm;
  server_name your_server_name;
  location / {
    try_files $uri $uri/ /index.html;
  }
  location ~ .php$ {
    try_files $uri =404;
    fastcgi_pass unix:unix:/run/php/php8.0-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_cache MYAPP;
    fastcgi_cache_valid 200 60m;
  }
}

Prueba de almacenamiento en caché FastCGI

Cree un archivo PHP simple en el directorio raíz del documento.

$ vi /usr/share/nginx/html/info.php

Pegue el siguiente contenido y guarde

<?php
phpinfo();
?>

Ahora solicita el archivo usando curl comando o usando un navegador

Si el almacenamiento en caché funciona bien, puede enumerar el directorio de almacenamiento en caché en /etc/nginx/cache

Probar caché nginx

Agregue la siguiente línea arriba de la directiva server{} para indicar si el caché se perdió o se acertó

add_header X-Cache $upstream_cache_status;

Reinicie Nginx y ejecute el curl comando como

$ curl -I https://localhost/info.php

acierto de caché

Configuración de excepciones de caché en Nginx fastCGI Cache

A veces, es posible que no necesitemos almacenar en caché contenidos dinámicos, como páginas de autenticación básicas. Se puede evitar que estos tipos de contenido se almacenen en caché en función de diferentes variables como “$request_method”, “”$request_uri”, “$http_cookie”, etc.

A continuación se muestra la configuración de muestra para la excepción de caché y debe usarse dentro del servidor{}

directiva.

#Cache everything by default

set $no_cache 0;

#Don't cache POST requests
if ($request_method = POST)
{
set $no_cache 1;
}


#Don't cache if the URL contains a query string
if ($query_string != "")
{
set $no_cache 1;
}


#Don't cache the following URLs
if ($request_uri ~* "/(cp/)")
{
set $no_cache 1;
}

#Don't cache if there is a cookie called PHPSESSID
if ($http_cookie = "PHPSESSID")
{
set $no_cache 1;
}

Conclusión

En este artículo, aprendimos cómo configurar Nginx con PHP para el almacenamiento en caché de contenido dinámico. Además, aprendimos sobre diferentes consejos para configurar excepciones de caché.

Cómo habilitar el almacenamiento en caché FastCGI del lado del servidor con Nginx y PHP

Related Posts