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