Cómo almacenar en caché el contenido en NGINX

Cómo almacenar en caché el contenido en NGINX

NGINX. es un servidor web consolidado de código abierto y alto rendimiento que acelera la entrega de contenido y aplicaciones, mejora la seguridad y mejora la escalabilidad. Uno de los casos de uso más comunes de Nginx. es el Almacenamiento en caché de contenido. que es la forma más eficaz de mejorar el rendimiento de un sitio web.

Lea también. Las 10 mejores herramientas de almacenamiento en caché de código abierto para Linux

Puede usar NGINX. para acelerar los servidores de origen local configurándolo para almacenar en caché las respuestas de los servidores ascendentes y también para crear servidores perimetrales para redes de entrega de contenido ( CDN. . NGINX potencia algunas de las CDN más grandes.

Cuando se configura como caché, NGINX:

  • almacena en caché contenido estático y dinámico.
  • mejora el contenido dinámico rendimiento con micro-caché.
  • servir contenido obsoleto mientras se revalida en segundo plano para un mejor rendimiento.
  • anular o establecer encabezados de Cache-Control, y más.

En este artículo, aprenderá a configurar NGINX. como Almacenamiento en caché de contenido. en Linux para que sus servidores web funcionen de la manera más eficiente posible.

Requisitos previos: freestar.config.enabled_slots.push

Debes tener NGINX. instalado en tu servidor Linux, si no, sigue estas guías para instalar Nginx:

  • Cómo instalar Nginx en CentOS 8
  • Cómo instalar Nginx en CentOS 7

Almacenar contenido estático en Nginx

El contenido estático es el contenido de un sitio web que permanece igual (no cambia) ac páginas de Ross. Los ejemplos de contenido estático incluyen archivos como imágenes, videos, documentos; Archivos CSS y archivos JavaScript.

Si su sitio web utiliza una gran cantidad de contenido estático, puede optimizar su rendimiento habilitando el almacenamiento en caché del lado del cliente donde el navegador almacena copias de contenido estático para un acceso más rápido.

La siguiente configuración de muestra es una buena opción, simplemente reemplace www.example.com con la URL del nombre de su sitio web y realice modificaciones en otros nombres de ruta según corresponda.

servidor zip

Almacenamiento en caché de contenido dinámico en Nginx

NGINX. utiliza una caché basada en disco persistente ubicada en algún lugar del sistema de archivos local. Empiece por crear el directorio del disco local para almacenar contenido en caché. # mkdir-p/var/cache/nginx

A continuación, establezca la propiedad adecuada en el directorio de la caché. Debe ser propiedad del usuario NGINX. ( nginx. y del grupo ( nginx. de la siguiente manera.

# chown nginx: nginx/var/cache/nginx

Ahora continúe para ver cómo habilitar el contenido dinámico en Nginx en la siguiente sección.

Habilitar FastCGI Cache en NGINX

FastCGI. (o FCGI. es un protocolo ampliamente utilizado para interconectar aplicaciones interactivas como PHP. con servidores web como NGINX. Es una extensión de CGI. ( Interfaz de puerta de enlace común. .

La principal ventaja de FCGI. es que administra múltiples solicitudes CGI en un solo proceso. Sin él, el servidor web tiene que abrir un nuevo proceso (que debe controlarse, procesar una solicitud y cerrarse) para cada solicitud de servicio de un cliente.

Para procesar PHP. scripts en una implementación de pila LEMP, NGINX. utiliza FPM. ( FastCGI Process Manager. o PHP-FPM. un implementación popular alternativa PHP FastCGI. Una vez que se está ejecutando el proceso PHP-FPM. NGINX. se configura para enviar solicitudes por proxy para su procesamiento. Por lo tanto, NGINX también se puede configurar para almacenar en caché las respuestas del servidor de aplicaciones backend PHP-FPM.

En NGINX. la caché de contenido FastCGI. se declara mediante una directiva llamada fastcgi_cache_path en el contexto http de nivel superior, dentro de la estructura de configuración de NGINX . También puede agregar fastcgi_cache_key que define una clave (identificador de solicitud) para el almacenamiento en caché.

Además, para leer el estado de la caché de flujo ascendente, agregue la directiva add_header X-Cache-Status. dentro el contexto http : esto es útil para fines de depuración.

Suponiendo que el archivo de configuración del bloque del servidor de su sitio se encuentra en /etc/nginx/conf.d/testapp.conf. o /etc/nginx/sites-available/testapp.conf. (en Ubuntu y sus derivados), abra el archivo de edición y agregue las siguientes líneas en la parte superior del archivo.

fastcgi_cache_path/niveles de var/cache/nginx = 1: 2 keys_zone = CACHEZONE: 10m; inactivo = 60 m tamaño_máx = 40 m; fastcgi_cache_key “$ esquema $ request_method $ host $ request_uri”; add_header X-Cache $ upstream_cache_status;  Habilitar FastCGI Cache en NGINX  Habilitar FastCGI Cache en NGINX Habilitar FastCGI C dolor en NGINX

La directiva fastcgi_cache_path especifica el número de parámetros que son:

  • /var/cache/nginx. la ruta al directorio del disco local para el caché.
  • niveles. define los niveles de jerarquía de una caché, configura una jerarquía de directorios de dos niveles en /var/cache/nginx.
  • keys_zone (nombre: tamaño). permite la creación de una zona de memoria compartida donde se almacenan todas las claves activas y la información sobre los datos (meta). Tenga en cuenta que almacenar las claves en la memoria acelera el proceso de verificación, al facilitar que NGINX determine si es un MISS. o HIT. sin verificar el estado en el disco.
  • inactivo. especifica la cantidad de tiempo después del cual los datos almacenados en caché a los que no se accede durante el tiempo especificado se eliminan de la caché independientemente de su actualización. Un valor de 60 m. en nuestra configuración de ejemplo significa que los archivos a los que no se accede después de 60 se eliminarán de la caché.
  • max_size. especifica el tamaño máximo de la cache. Hay más parámetros que puede usar aquí (lea la documentación de NGINX para obtener más información).

Las variables en la directiva fastcgi_cache_key se describen a continuación.

NGINX las usa en calcular la clave (identificador) de una solicitud. Es importante destacar que para enviar una respuesta en caché al cliente, la solicitud debe tener la misma clave que una respuesta en caché.

  • $ esquema. esquema de solicitud, HTTP o HTTPS.
  • $ request_method. método de solicitud, generalmente “ GET. o “ POST. .
  • $ host. puede ser el nombre de host de la línea de solicitud, o el nombre de host del campo de encabezado de solicitud “ Host. , o el nombre del servidor que coincide con una solicitud, en el orden de precedencia. .
  • $ request_uri. significa el URI de solicitud original completo (con argumentos).

Además, la variable $ upstream_cache_status en la La directiva add_header X-Cache-Status. se calcula para cada solicitud a la que responde NGINX, ya sea una MISS. (respuesta no encontrada en la caché, obtenida del servidor de aplicaciones) o una HIT. (respuesta servida desde la caché) o cualquiera de los otros valores admitidos.

A continuación, dentro de la ubicación ation que pasa solicitudes PHP a PHP-FPM. usa las directivas fastcgi_cache para activar la caché que acaba de definir anteriormente.

También configure el tiempo de almacenamiento en caché para diferentes respuestas usando la directiva fastcgi_cache_valid como se muestra.

fastcgi_cache CACHEZONE; fastcgi_cache_valid 60m;  Definir la zona y el tiempo de almacenamiento en caché  Definir zona de almacenamiento en caché y tiempo Definir la zona y el tiempo de almacenamiento en caché

Si solo se especifica el tiempo de almacenamiento en caché como en nuestro caso, solo se almacenan en caché las respuestas 200. 301. y 302. . Pero también puede especificar las respuestas explícitamente o usar cualquiera (para cualquier código de respuesta):

fastcgi_cache CACHEZONE; fastcgi_cache_valid 200 301 203 60m; fastcgi_cache_valid 404 10m; O fastcgi_cache CACHEZONE; fastcgi_cache_valid cualquier 10 m; o el contexto del servidor o la ubicación .

fastcgi_cache_min_uses 3  Establecer el uso mínimo de caché  Establecer mínimo Uso de caché Establecer el uso mínimo de caché

Para habilitar la revalidación de elementos de caché caducados mediante solicitudes condicionales con” If-Modified-Since. ” y “ Si-Ninguno-Match. ”, agregue la directiva fastcgi_cache_revalidate, dentro del contexto http o servidor o ubicación .

fastcgi_cache_revalidate on;  Establecer caché Revalidación  Set Cache Re-validation Set Cache Re-validación

También puede indicarle a NGINX. que entregue contenido en caché cuando el servidor de origen o el servidor FCGI esté inactivo, utilizando la directiva proxy_cache_use_stale, dentro de la directiva de ubicación.

Esta configuración de muestra significa que cuando NGINX. recibe un error, tiempo de espera y cualquiera de los errores especificados del servidor ascendente y tiene una versión obsoleta del archivo solicitado en el contenido en caché, entrega el archivo obsoleto.

proxy_cache_use_stale error timeout http_500;  Habilitar publicación de datos obsoletos  Habilitar el servicio de datos obsoletos Habilitar el servicio de datos obsoletos

Otra directiva útil para ajustar FCGI El rendimiento del almacenamiento en caché es fastcgi_cache_background_update, que funciona junto con la directiva proxy_cache_use_stale. Cuando está activado, le indica a NGINX que proporcione contenido obsoleto cuando los clientes soliciten un archivo caducado o en proceso de actualización desde el servidor ascendente.

fastcgi_cache_background_update on;  Habilitar actualización de fondo de caché  Habilitar actualización de fondo de caché Habilitar actualización de fondo de caché

El fastcgi_cache_lock también es útil para ajustar el rendimiento de la caché en ese varios clientes solicitan el mismo contenido que no está en la caché, NGINX enviará solo la primera solicitud al servidor ascendente, almacenará la respuesta en caché y luego atenderá las otras solicitudes de clientes desde la caché.

fastcgi_cache_lock on;  Habilitar bloqueo de caché  Habilitar bloqueo de caché Habilitar bloqueo de caché

Después de realizar todos los cambios anteriores en el archivo de configuración NGINX. guarde y cierre eso. Luego, verifique la estructura de configuración en busca de errores de sintaxis antes de reiniciar el servicio NGINX.

# nginx-t # systemctl restart nginx  Verificar e iniciar el servicio Nginx  Verificar e iniciar el servicio Nginx Verificar e iniciar el servicio Nginx

A continuación, pruebe si la caché está funcionando correctamente, intente para acceder a su aplicación web o sitio utilizando el siguiente comando curl (la primera vez debe indicar un FALTA. pero las solicitudes posteriores deben indicar un HIT. como se muestra n en la captura de pantalla).

# curl-I http://testapp.tecmint.com  Prueba FastCGI Cache  Prueba FastCGI Cache Prueba FastCGI Cache

Aquí hay otra captura de pantalla que muestra NGINX sirviendo datos obsoletos.

 Prueba Nginx sirviendo datos obsoletos  Prueba Nginx que sirve datos obsoletos Prueba Nginx que proporciona datos obsoletos

Adición de excepciones para omitir la caché

Es posible establecer condiciones bajo las cuales NGINX. no debe enviar respuestas en caché a los clientes, usando la directiva fastcgi_cache_bypass. Y para indicarle a NGINX que no almacene en caché las respuestas del servidor ascendente, use fastcgi_no_cache.

Por ejemplo, si desea que las solicitudes POST. y las URL con una cadena de consulta vayan siempre a PHP. Primero, declare una instrucción if para establecer la condición de la siguiente manera.

set $ skip_cache 0; if ($ request_method = POST) set $ skip_cache 1;

Luego active la excepción anterior en la directiva de ubicación que pasa solicitudes PHP a PHP-FPM. usando las directivas fastcgi_cache_bypass y fastcgi_no_cache.

fastcgi_cache_bypass $ skip_cache; fastcgi_no_cache $ skip_cache;

Hay muchas otras partes de su sitio para las que es posible que no desee habilitar el almacenamiento en caché de contenido. La siguiente es una configuración de ejemplo de NGINX para mejorar el rendimiento de un sitio de WordPress, proporcionada en el blog nginx.com.

Para usarlo, realice cambios (como el dominio, rutas, nombres de archivos, etc.) para reflejar lo que existe en su entorno.

fastcgi_cache_path/var/run/NGINX-cache levels = 1: 2 keys_zone = WORDPRESS: 100m inactivo = 60m; fastcgi_cache_key “$ esquema $ request_method $ host $ request_uri”; servidor bz2

Habilitar la caché de proxy en NGINX

NGINX. también admite el almacenamiento en caché de respuestas de otros servidores proxy (definido por la directiva proxy_pass). Para este caso de prueba, usamos NGINX como proxy inverso para una aplicación web Node.js, por lo que habilitaremos NGINX como caché para la aplicación Node.js. Todas las directivas de configuración utilizadas aquí tienen significados similares a las directivas FastCGI en la sección anterior, por lo que no las explicaremos nuevamente.

Para habilitar el almacenamiento en caché de las respuestas de un servidor proxy, incluya la directiva proxy_cache_path en la parte superior-level http contexto. Para especificar cómo se almacenan en caché las solicitudes, también puede agregar la directiva proxy_cache_key de la siguiente manera.

proxy_cache_path/var/cache/nginx app1 keys_zone = PROXYCACHE: 100m inactive = 60m max_size = 500m; proxy_cache_key “$ esquema $ request_method $ host $ request_uri”; add_header X-Cache-Status $ upstream_cache_status; proxy_cache_min_uses 3;

A continuación, active la caché en la directiva de ubicación.

location/proxy_pass http://127.0.0.1:3000; proxy_cache PROXYCACHE; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;

Para definir las condiciones bajo las cuales NGINX no envía contenido almacenado en caché y no almacena en caché una respuesta del servidor ascendente, incluya proxy_cache_bypass y proxy_no_cache.

proxy_cache_bypass $ cookie_nocache $ arg_nocache $ arg_comment; proxy_no_cache $ http_pragma $ http_authorization;

Ajuste del rendimiento de la caché del proxy

Las siguientes directivas son útiles para ajustar el rendimiento de la caché del proxy. También tienen los mismos significados que las directivas FastCGI.

proxy_cache_min_uses 3; proxy_cache_revalidate on; proxy_cache_use_stale error timeout actualizando http_500; proxy_cache_background_update encendido; proxy_cache_lock activado;

Para obtener más información y las directivas de configuración del almacenamiento en caché, consulte la documentación de los dos módulos principales ngx_http_fastcgi_module y ngx_http_proxy_module.

Recursos adicionales: almacenamiento en caché de contenido de NGINX y consejos para mejorar el rendimiento de WordPress.