Función de NGINX Plus: almacenamiento en caché

Uno de los casos de uso más populares de NGINX Plus es como caché de contenido, tanto para acelerar los servidores de origen locales como para crear servidores de borde para las redes de distribución de contenido (CDN). El almacenamiento en caché puede reducir la carga de los servidores de origen en gran medida, dependiendo de la capacidad del contenido para almacenarlo en caché y del perfil del tráfico de usuario.

NGINX Plus puede almacenar en caché contenido recuperado de servidores HTTP ascendentes y respuestas devueltas por los servicios FastCGI, SCGI y uwsgi.

NGINX Plus amplía las capacidades de almacenamiento en caché de contenido de NGINX Open Source al agregar soporte para la purga de caché y una visualización enriquecida del estado de la memoria caché en el panel de supervisión de actividad en vivo:

cache-state-R7

Motivos para usar el almacenamiento en caché de contenido

El almacenamiento en caché de contenido mejora los tiempos de carga de las páginas web, reduce la carga de los servidores ascendentes y aumenta la disponibilidad al usar el contenido almacenado en caché como copia de seguridad en caso de error de los servidores de origen:

  • Rendimiento mejorado del sitio: NGINX Plus sirve contenido de cualquier tipo almacenado en caché a la misma velocidad que el contenido estático, lo que supone una latencia reducida y un sitio web con mayor capacidad de respuesta.
  • Capacidad incrementada: NGINX Plus descarga sus servidores de origen de las tareas repetitivas, lo que libera capacidad para atender a más usuarios y ejecutar más aplicaciones.
  • Mayor disponibilidad: NGINX Plus aísla a sus usuarios en caso de errores catastróficos al proporcionar contenido almacenado en caché (aunque esté obsoleto) cuando los servidores de origen no funcionan.

NGINX Plus y NGINX ofrecen una solución consolidada para su infraestructura web, en la que se reúnen un servidor HTTP para el contenido de origen, puertas de enlace de aplicaciones para FastCGI y otros protocolos y un proxy HTTP para los servidores ascendentes. NGINX Plus agrega equilibrio de carga de aplicaciones de nivel empresarial, con la consolidación de los equilibradores de carga de frontend en su infraestructura web.

Análisis detallado del almacenamiento en caché de contenido con NGINX Plus

El contenido en caché se almacena en una caché persistente en disco y lo proporcionan NGINX Plus y NGINX exactamente de la misma forma que el contenido de origen.

Para habilitar el almacenamiento en caché de contenido, incluya las directivas proxy_cache_path y proxy_cache en la configuración:

# Definir una ubicación de caché de contenido en el disco proxy_cache_path /tmp/cache keys_zone=mycache:10m inactive=60m;

server {
    listen 80;
    server_name localhost;
 
    location / {
        proxy_pass http://localhost:8080;
 
       # hacer referencia a la memoria caché en una ubicación que use proxy_pass
       proxy_cache mycache;
    }
}

De forma predeterminada, NGINX Plus y NGINX adoptan un enfoque seguro y precavido del almacenamiento en caché de contenido. Almacenan en caché el contenido que recupera una solicitud GET o HEAD, sin una respuesta Set-Cookie, y el tiempo de caché lo definen los encabezados del servidor de origen (X-Accel-Expires, Cache-Control y Expires). NGINX Plus respeta las extensiones Cache-Control definidas en RFC 5861, stale-while-revalidate y stale-if-error.

Cada uno de estos comportamientos puede ampliarse y ajustarse mediante una amplia gama de directivas. Para obtener una introducción más completa, consulte la Guía de gestión de NGINX Plus.

Instrumentación de la memoria caché

La API de supervisión de actividad en vivo de NGINX Plus informa sobre diversas estadísticas que puede utilizar para medir el uso y la eficacia de las memorias caché de contenido:

Datos JSON de ejemplo de la API de supervisión de actividad en vivo

Los datos JSON incluyen información completa sobre la actividad de la memoria caché.

Gestión de contenido obsoleto

De forma predeterminada, NGINX Plus y NGINX sirven el contenido almacenado en caché durante el tiempo que sea válido. La validez se puede configurar o controlar mediante el conjunto de encabezado Cache-Control en el servidor de origen. Una vez transcurrido el período de validez, el contenido almacenado en caché se considera obsoleto y debe revalidarse comprobando que este siga coincidiendo con el contenido que se encuentra en el servidor de origen.

Es posible que un cliente no solicite nunca contenido obsoleto, por lo que NGINX Plus y NGINX revalidan el contenido obsoleto solo cuando el cliente lo solicita. Esta acción puede realizarse en segundo plano, sin interrumpir ni retrasar la solicitud del cliente al servir inmediatamente el contenido obsoleto. Este tipo de contenido también se ofrece cuando el servidor de origen no está disponible, lo que proporciona una alta disponibilidad durante los picos de carga o interrupciones largas del servidor de origen.

Las condiciones bajo las cuales NGINX y NGINX Plus sirven contenido obsoleto pueden configurarse con directivas o respetando los valores que se encuentran en el encabezado Cache-Control del servidor de origen, stale-while-revalidate y stale-if-error.

Purga de contenido de la memoria caché

Uno de los efectos secundarios del almacenamiento en caché de contenido es que las actualizaciones de contenido del servidor de origen no se propagan necesariamente de forma inmediata a la memoria caché, por lo que es posible que a los clientes se les siga proporcionando el contenido antiguo durante un tiempo. Si en una operación de actualización se cambia un número de recursos al mismo tiempo (por ejemplo, se cambia un archivo CSS y varias imágenes a las que se hace referencia), es posible que al cliente se le proporcione una mezcla de recursos obsoletos y actuales, lo que da lugar a una presentación incoherente.

Con la función de purga de caché de NGINX Plus puede abordar este problema de forma fácil. La directiva proxy_cache_purge le permite eliminar inmediatamente de la caché de contenido de NGINX Plus las entradas que coinciden con un valor configurado. Este método lo desencadena sobre todo una solicitud que contenga un método o encabezado HTTP personalizado.

Por ejemplo, la siguiente configuración identifica las solicitudes que usan el método HTTP PURGE y elimina las direcciones URL coincidentes:

proxy_cache_path /tmp/cache keys_zone=mycache:10m levels=1:2 inactive=60s;

map $request_method $purge_method {
    PURGE 1;
    default 0;
}

server {
    listen 80;
    server_name www.example.com;

    location / {
        proxy_pass http://localhost:8002;
        proxy_cache mycache;

        proxy_cache_purge $purge_method;
    }
}

Puede emitir solicitudes de purga con una amplia variedad de herramientas, como el comando curl en el siguiente ejemplo:

$ curl -X PURGE -D – "http://www.example.com/*"
HTTP/1.1 204 No Content
Server: nginx/1.5.12
Date: Sat, 03 May 2014 16:33:04 GMT
Connection: keep-alive

Tal y como se muestra en el ejemplo, puede purgar todo un conjunto de recursos que tengan una dirección URL común si se anexa el comodín de asterisco (*) a la dirección URL.

Más información

NGINX Plus hereda todas las capacidades de almacenamiento en caché de NGINX. Para obtener más detalles, consulte la Guía de gestión de NGINX Plus y la documentación de referencia.

Próximos pasos