GNU/Linux >> Tutoriales Linux >  >> Linux

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 mejorar el 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 de la directiva servidor {} .

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,

  • ruta_caché_fastcgi – ubicación del caché
  • niveles – nivel de jerarquía de caché, establece una jerarquía de directorios de dos niveles en /etc/nginx/cache
  • claves_zona – nombre de zona de memoria (En este ejemplo he usado MYAPP. Puede tener su 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 este ejemplo, el tiempo de inactividad se establece en 60 m, que se puede aumentar o disminuir.
  • fastcgi_cache_key – Especifica cómo se codificarán los nombres de los archivos 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
  • $host – Nombre del servidor que coincide con la solicitud
  • $request_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 el intercambio de RAM 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

Ahora reinicie el servicio Nginx.

$ systemctl restart nginx

Parece un archivo de configuración de vhost completo

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 solicite el archivo usando el comando curl o usando un navegador

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

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

add_header X-Cache $upstream_cache_status;

Reinicie Nginx y ejecute el comando curl como

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

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é.


Linux
  1. Cómo instalar y configurar Varnish Cache 6 con Nginx en CentOS 8

  2. Cómo habilitar HTTP2 en NGINX

  3. Cómo instalar y habilitar la caché de PHP alternativa (APC) en CentOS

  4. Cómo instalar PHP 7.4 con Nginx en Ubuntu 20.04

  5. ¿Cómo investigar una pérdida de memoria con Apache y PHP?

¿Cómo habilitar IPv6 en Nginx?

Cómo habilitar TLS 1.3 en Apache y Nginx

Cómo configurar PHP-FPM con NGINX

Cómo implementar una aplicación PHP con Nginx y MySQL usando Docker y Docker Compose

Cómo instalar y configurar Memcached con Apache y PHP

Cómo habilitar la biblioteca GD en PHP con LibJPEG, FreeType y LibPNG