Cómo almacenar contenido en caché en Nginx

Cómo almacenar contenido en caché en Nginx

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

Leer también: 10 herramientas de almacenamiento de almacenamiento de código abierto para Linux

Puedes usar Nginx para acelerar los servidores de origen local configurándolo para almacenar en caché de las respuestas de los servidores ascendentes y también para crear servidores de borde para redes de entrega de contenido (CDNS). Nginx impulsa algunos de los CDN más grandes.

Cuando está configurado como un caché, Nginx lo hará:

  • Cache estático y contenido dinámico.
  • Mejorar el rendimiento del contenido dinámico con el microcaching.
  • Servir contenido obsoleto mientras se revalida en segundo plano para un mejor rendimiento.
  • anular o establecer encabezados de control de caché, y más.

En este artículo, aprenderá cómo configurar Nginx como un Almacenamiento en caché de contenido en Linux para que sus servidores web se ejecuten de la manera más eficiente posible.

Prerrequisitos:

Deberías Nginx Instalado en su servidor Linux, si no siga estas guías para instalar Nginx:

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

Contenido estático de caché en Nginx

El contenido estático es contenido de un sitio web que sigue siendo el mismo (no cambia) en las páginas. Los ejemplos de contenido estático incluyen archivos como imágenes, videos, documentos; Archivos CSS y archivos JavaScript.

Si su sitio web utiliza mucho contenido estático, puede optimizar su rendimiento al permitir 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 oportunidad, simplemente reemplace www.ejemplo.comunicarse con la URL del nombre de su sitio web y realizar modificaciones a otros nombres de ruta según corresponda.

servidor  # Sustituya la URL de su servidor web para www.ejemplo.com server_name www.ejemplo.comunicarse; root/var/www/ejemplo.comunicarse/htdocs; índice índice.php; access_log/var/log/nginx/ejemplo.comunicarse.acceso.registro; Error_log/var/log/nginx/ejemplo.comunicarse.error.registro; ubicación / try_files $ uri $ uri / / index.php?$ args;  Ubicación ~ .php $ try_files $ uri = 404; incluir fastcgi_params; # Sustituya el socket, o la dirección y el puerto, de su servidor de WordPress FastCGI_Pass unix:/var/run/php5-fpm.calcetín; #FASTCGI_PASS 127.0.0.1: 9000;  ubicación ~* .(OGG | OGV | SVG | SVGZ | EOT | OTF | WOFF | MP4 | TTF | CSS | RSS | ATOM | JS | JPG | JPEG | GIF | PNG | ICO | ZIP | TGZ | GZ | RAR | BZ2 | DOC | XLSS | exe | ppt | tar | mid | midi | wav | bmp | rtf) $ expire max; log_not_found off; access_log apagado;  

Contenido dinámico de caché en Nginx

Nginx utiliza un caché persistente basado en disco ubicado en algún lugar del sistema de archivos local. Entonces, comience por crear el directorio de disco local para almacenar contenido en caché.
# mkdir -p/var/cache/nginx

A continuación, establezca la propiedad apropiada en el directorio de caché. Debe ser propiedad de la Nginx usuario (nginx) y grupo (nginx) como sigue.

# chown nginx: nginx/var/cache/nginx 

Ahora continúe más para ver cómo habilitar contenido dinámico en Nginx en la sección a continuación.

Habilitando el caché de FastCGI en Nginx

Fastcgi (o FCGI) es un protocolo ampliamente utilizado para interactuar aplicaciones interactivas como Php con servidores web como Nginx. Es una extensión del CGI (Interfaz de Entrada Común).

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

Para procesar Php Scripts en una implementación de pila Lemp, Nginx usos FPM (Fastcgi Process Manager) o Php-FPM, una popular implementación alternativa de PHP FastCGI. Una vez el Php-FPM El proceso se está ejecutando, Nginx está configurado en solicitudes de proxy para su procesamiento. Por lo tanto, NGINX también se puede configurar para caché de respuestas de la Php-FPM servidor de aplicaciones de backend.

Bajo Nginx, el Fastcgi El caché de contenido se declara utilizando una directiva llamada fastcgi_cache_path en el nivel superior http contexto, dentro de la estructura de configuración de Nginx. También puedes agregar el fastcgi_cache_key que define una clave (identificador de solicitud) para almacenar en caché.

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

Suponiendo que el archivo de configuración del bloque de servidor de su sitio se encuentra en /etc/nginx/conf.d/testApp.confusión o /etc/nginx/sites disponible/testApp.confusión (Bajo 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/var/cache/nginx niveles = 1: 2 keys_zone = cachezone: 10m; inactivo = 60m max_size = 40m; fastcgi_cache_key "$ esquema $ request_method $ host $ request_uri"; add_header x-cache $ upstream_cache_status; 
Habilitar la caché de FastCGI en Nginx

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

  • /var/cache/nginx - el camino al directorio de disco local para el caché.
  • nivel - Define los niveles de jerarquía de un caché, establece una jerarquía de directorio de dos niveles bajo /var/cache/nginx.
  • keys_zone (nombre: tamaño) - habilita la creación de una zona de memoria compartida donde se almacenan todas las claves activas e información sobre datos (meta). Tenga en cuenta que almacenar las teclas en la memoria acelera el proceso de verificación, al facilitar que Nginx determine si es un EXTRAÑAR o GOLPEAR, sin verificar el estado en el disco.
  • inactivo - Especifica la cantidad de tiempo después del cual los datos en caché a los que no se accede durante el tiempo especificado se elimina del caché independientemente de su frescura. Un valor de 60m En nuestro ejemplo, la configuración significa que los archivos no se acceden después de que 60 se eliminarán del caché.
  • tamaño máximo - Especifica el tamaño máximo del caché. Hay más parámetros que puede usar aquí (lea la documentación de Nginx para obtener más información).

Las variables en el fastcgi_cache_key La directiva se describe a continuación.

Nginx los usa para 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 "CONSEGUIR" o "CORREO".
  • $ anfitrión - Esto puede ser nombre de host desde la línea de solicitud, o nombre de host del "Anfitrión"Solicitar el campo de encabezado, o el nombre del servidor que coincide con una solicitud, en el orden de precedencia.
  • $ request_uri - significa la solicitud de solicitud original completa (con argumentos).

También el $ upstream_cache_status variable en el add_header X-Cache-Status se calcula la directiva para cada solicitud a la que responde Nginx, ya sea un EXTRAÑAR (respuesta no se encuentra en el caché, obtiene del servidor de aplicaciones) o un GOLPEAR (Respuesta servida de caché) o cualquiera de los otros valores compatibles.

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

También establezca tiempo de almacenamiento en caché para diferentes respuestas utilizando el fastcgi_cache_valid Directiva como se muestra.

fastcgi_cache cachezone; fastcgi_cache_valid 60m; 
Definir zona de almacenamiento en caché y tiempo

Si solo el tiempo de almacenamiento en caché se especifica como en nuestro caso, solo 200, 301, y 302 Las respuestas se almacenan en caché. 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 10m; 

Rendimiento de almacenamiento en caché de Fastcgi de ajuste fino en Nginx

Para establecer el número mínimo de veces que se debe hacer una solicitud con la misma clave antes de que la respuesta esté en caché, incluya el fastcgi_cache_min_uses directiva, ya sea en el http o servidor o ubicación contexto.

Fastcgi_cache_min_uses 3 
Establecer el uso mínimo de caché

Para habilitar la realidación de elementos de caché vencidos utilizando solicitudes condicionales con el "Si modificado" y "If-none-partido"Campos de encabezado, agregue el fastcgi_cache_revalidate directiva, dentro del http o servidor o ubicación contexto.

fastcgi_cache_revalidate on; 
Establecer la realidación de caché

También puedes instruir Nginx para entregar contenido en caché cuando el servidor de origen o el servidor FCGI está inactivo, utilizando el proxy_cache_use_stale Directiva, dentro de la Directiva de ubicación.

Esta configuración de muestra significa que cuando Nginx recibe un error, un 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 rancio.

proxy_cache_use_stale Error Tiempo de espera http_500; 
Habilitar la entrega de datos rancios

Otra directiva útil para ajustar el rendimiento del almacenamiento en caché de FCGI es Fastcgi_cache_background_update que funciona junto con el proxy_cache_use_stale directiva. Cuando se establece en ON, le indica a Nginx que sirva contenido rancio cuando los clientes solicitan un archivo que expire o esté en el proceso de actualizarse desde el servidor ascendente.

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

El fastcgi_cache_lock También es útil, para el rendimiento de la caché, ajuste en el sentido de que si múltiples clientes solicitan el mismo contenido que no está en la caché, Nginx reenviará solo la primera solicitud al servidor ascendente, caché la respuesta y luego atreve a las solicitudes del otro cliente desde el cache.

fastcgi_cache_lock on; 
Habilitar el bloqueo de caché

Después de hacer todos los cambios anteriores en el Nginx Archivo de configuración, guardarlo y cerrarlo. Luego verifique la estructura de configuración para cualquier error de sintaxis antes de reiniciar el servicio NGINX.

# nginx -t # systemctl reiniciar nginx 
Verifique y inicie el servicio Nginx

A continuación, pruebe si el caché funciona correctamente, intente acceder a su aplicación o sitio web utilizando el siguiente comando curl (la primera vez debe indicar un EXTRAÑAR, Pero las solicitudes posteriores deben indicar un GOLPEAR Como se muestra en la captura de pantalla).

# curl -i http: // testApp.tecmenta.comunicarse 
Prueba de caché de Fastcgi

Aquí hay otra captura de pantalla que muestra a Nginx sirviendo datos rancios.

Prueba Nginx que sirve datos rancios

Agregar excepciones al caché de omitir

Es posible establecer condiciones bajo las cuales Nginx no debe enviar respuestas en caché a los clientes, utilizando el fastcgi_cache_bypass directiva. Y para instruir a Nginx que no almacene en caché las respuestas del servidor ascendente, use el fastcgi_no_cache.

Por ejemplo, si quieres CORREO Solicitudes y URL con una cadena de consulta para ir siempre a PHP. Primero, declare una declaración IF para establecer la condición de la siguiente manera.

establecer $ skip_cache 0; if ($ request_method = post) set $ skip_cache 1;  

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

 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. El siguiente es un ejemplo de configuración de Nginx para mejorar el rendimiento de un sitio de WordPress, proporcionado en el nginx.comunicarse Blog.

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

fastcgi_cache_path/var/run/nginx-cache niveles = 1: 2 keys_zone = wordpress: 100m inactive = 60m; fastcgi_cache_key "$ esquema $ request_method $ host $ request_uri"; SERVER Ejemplo de server_name.com www.ejemplo.com; root/var/www/ejemplo.com; índice índice.php; access_log/var/log/nginx/ejemplo.comunicarse.acceso.registro; ERROR_LOG/VAR/LOG/NGINX/Ejemplo.comunicarse.error.registro; establecer $ skip_cache 0; # Publicar solicitudes y URL con una cadena de consulta siempre debe ir a php if ($ request_method = post) establecer $ skip_cache 1;  if ($ query_string != "") establecer $ skip_cache 1;  # No almacenes en caché de URI que contenga los siguientes segmentos si ($ request_uri ~* "/wp-admin/|/xmlrpc.PHP | WP-.*.php |/feed/| índice.Php | Sitemap (_index)?.xml ") set $ skip_cache 1; # No use el caché para usuarios iniciados o comentaristas recientes if ($ http_cookie ~*" comment_author | wordpress_ [a-f0-9]+| wp-pospass | wordpress_no_cache | WordPress_Logged_in ") set $ skip_cache 1; ubicación / try_files $ uri $ uri / / index.php?$ args;  Ubicación ~ .php $ try_files $ uri /index.php; incluir fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.calcetín; fastcgi_cache_bypass $ skip_cache; fastcgi_no_cache $ skip_cache; fastcgi_cache WordPress; fastcgi_cache_valid 60m;  ubicación ~ /Purge ( /.*) fastcgi_cache_purge WordPress "$ esquema $ request_method $ host $ 1";  ubicación ~* ^.+.(OGG | OGV | SVG | SVGZ | EOT | OTF | WOFF | MP4 | TTF | CSS | RSS | ATOM | JS | JPG | JPEG | GIF | PNG | ICO | ZIP | TGZ | GZ | RAR | BZ2 | DOC | XLSS | exe | ppt | tar | mid | midi | wav | bmp | rtf) $ access_log Off; log_not_found off; expira max;  ubicación = /robots.txt access_log Off; log_not_found off;  ubicación ~ /.  negar todo; access_log apagado; log_not_found off;  

Habilitando el caché proxy en nginx

Nginx también admite el almacenamiento en caché de las respuestas de otros servidores provisionales (definidos por el proxy_pass directiva). Para este caso de prueba, estamos utilizando NGINX como un proxy inverso para un nodo.Aplicación web JS, por lo que habilitaremos NGINX como un caché para el nodo.aplicación JS. Todas las directivas de configuración utilizadas aquí tienen significados similares que 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 el proxy_cache_path directiva en el nivel superior http contexto. Para especificar cómo se almacenan en caché las solicitudes, también puede agregar el proxy_cache_key Directiva 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 el caché en la directiva de ubicación.

ubicación/proxy_pass http: // 127.0.0.1: 3000; proxy_cache proxycache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;  

Para definir condiciones bajo las cuales Nginx no envía contenido en caché y no almacena en caché una respuesta en absoluto desde el servidor ascendente, incluya el proxy_cache_bypass y proxy_no_cache.

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

Rendimiento de caché proxy de ajuste

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

proxy_cache_min_uses 3; proxy_cache_revalidate on; proxy_cache_use_stale TIMEOT TIMEOut Actualización http_500; proxy_cache_background_update on; proxy_cache_lock on; 

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

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