miércoles, 8 de septiembre de 2021

Guardando caché en un reverse proxy nginx



Cómo configurar cache en reverse proxy nginx.



Un caché de contenido se encuentra entre un cliente y un "servidor de origen" y guarda copias de todo el contenido que este presenta. Si un cliente solicita contenido que el caché ha almacenado, este devuelve el contenido directamente sin contactar al servidor de origen. Esto mejora el rendimiento de una web ya que la caché de contenido está más cerca del cliente y utiliza los servidores de aplicaciones de manera más eficiente porque no tienen que hacer el trabajo de generar páginas desde cero cada vez.

Hay potencialmente varios cachés entre el navegador web y el servidor de aplicaciones: el caché del navegador del cliente, los cachés intermediarios, las redes de entrega de contenido (CDN) y el equilibrador de carga o el proxy inverso que se encuentra frente a los servidores de aplicaciones. El almacenamiento en caché, incluso a nivel de equilibrador de carga/proxy inverso, puede mejorar considerablemente el rendimiento.

NGINX se implementa comúnmente como un proxy inverso o un balanceador de carga en una pila de aplicaciones y tiene un conjunto completo de funciones de almacenamiento en caché. Para ello, solo se necesitan dos directivas: proxy_cache_path y proxy_cache. La directiva proxy_cache_path establece la ruta y la configuración del caché, y la directiva proxy_cache lo activa.

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { # ... location / { proxy_cache my_cache; proxy_pass http://my_upstream; } }

Los parámetros de la directiva proxy_cache_path definen la siguiente configuración:

- El directorio del disco local para el caché se llama /ruta/a/caché/.

- levels establece una jerarquía de directorios de dos niveles en /ruta/a/caché/. Tener una gran cantidad de archivos en un solo directorio puede ralentizar el acceso a los archivos, por lo que recomendamos una jerarquía de directorios de dos niveles para la mayoría de las implementaciones. Si el parámetro de niveles no está incluido, NGINX coloca todos los archivos en el mismo directorio.

- keys_zone configura una zona de memoria compartida para almacenar las claves de caché y los metadatos, como los temporizadores de uso. Tener una copia de las claves en la memoria permite que NGINX determine rápidamente si una solicitud es HIT o MISS sin tener que ir al disco, lo que acelera enormemente la verificación. Una zona de 1 MB puede almacenar datos de unas 8000 claves, por lo que la zona de 10 MB configurada en el ejemplo puede almacenar datos de unas 80 000 claves.

- max_size establece el límite superior del tamaño de la memoria caché (a 10 gigabytes en este ejemplo). es opcional; no especificar un valor permite que la memoria caché crezca para usar todo el espacio disponible en el disco. Cuando el tamaño de la caché alcanza el límite, un proceso llamado administrador de caché elimina los archivos que se usaron menos recientemente para que el tamaño de la caché vuelva a estar por debajo del límite.

- inactive especifica cuánto tiempo puede permanecer un elemento en la memoria caché sin que se acceda a él. En este ejemplo, el proceso del administrador de caché elimina automáticamente un archivo que no se ha solicitado durante 60 minutos, independientemente de si ha caducado o no. El valor predeterminado es 10 minutos (10 m). El contenido inactivo difiere del contenido caducado. NGINX no elimina automáticamente el contenido que ha caducado según lo definido por un encabezado de control de caché (Cache-Control:max-age=120, por ejemplo). El contenido caducado (obsoleto) se elimina solo cuando no se ha accedido a él durante el tiempo especificado por inactivo. Cuando se accede al contenido caducado, NGINX lo actualiza desde el servidor de origen y restablece el temporizador inactivo.

- NGINX primero escribe los archivos que están destinados a la memoria caché en un área de almacenamiento temporal, y la directiva use_temp_path=off le indica a NGINX que los escriba en los mismos directorios donde se almacenarán en la memoria caché. Le recomendamos que desactive este parámetro para evitar la copia innecesaria de datos entre sistemas de archivos. use_temp_path se introdujo en NGINX versión 1.7.10 y NGINX Plus R6.

- proxy_cache activa el almacenamiento en caché de todo el contenido que coincide con la URL del bloque de ubicación principal (en el ejemplo, /). También puede incluir la directiva proxy_cache en un bloque de servidor; se aplica a todos los bloques de ubicación del servidor que no tienen su propia directiva proxy_cache.

Una característica poderosa del almacenamiento en caché de contenido de NGINX es que NGINX se puede configurar para entregar contenido obsoleto de su caché cuando no puede obtener contenido nuevo de los servidores de origen. Esto puede suceder si todos los servidores de origen de un recurso en caché están inactivos o temporalmente ocupados.

Si un contenido no está disponible, en lugar de transmitir el error al cliente, NGINX entrega la versión obsoleta del archivo desde su caché. Esto proporciona un nivel adicional de tolerancia a fallas para los servidores que NGINX está representando y garantiza el tiempo de actividad en caso de fallas del servidor o picos de tráfico. Para habilitar esta funcionalidad, incluir la directiva proxy_cache_use_stale:

location / { # ... proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; }

Si NGINX recibe un error, tiempo de espera o cualquiera de los errores 5xx especificados del servidor de origen y tiene una versión obsoleta del archivo solicitado en su caché, entrega el archivo obsoleto en lugar de transmitir el error al cliente.


Fuentes:

https://www.nginx.com/blog/nginx-caching-guide/
0

0 comentarios:

Publicar un comentario