Estoy desarrollando un sistema de almacenamiento en caché para una plataforma de comercio electrónico que utilizará un proxy inverso para el almacenamiento en caché. Planeo manejar la invalidación mediante el uso de encabezados HTTP / 1.1 adecuados. Es decir, estableceré un ETag en la primera generación del contenido y almacenaré en caché ese valor de ETag en la aplicación. El encabezado Cache-Control especificará "must-revalidate", por lo que el proxy debe establecer el encabezado If-None-Match en solicitudes posteriores con el ETag. La aplicación buscará el valor de ETag en caché y, si coincide, enviará una respuesta 304, de lo contrario generará una respuesta completa de 200.
Esperaba usar nginx, pero no puedo asegurar con certeza que sea compatible con ETags (¿los documentos indican que no es así, pero tal vez están desactualizados?). El barniz es otra opción, pero tampoco soy positivo aquí ...
¿Qué servidores proxy inversos tienen soporte completo para ETags? En realidad, me gustaría almacenar varias versiones en caché para poder hacer cosas como pruebas divididas sin tener que desactivar la memoria caché. Es decir, HTTP / 1.1 especifica que un cliente puede enviar If-None-Match con múltiples valores de ETag y el servidor debe responder con qué ETag coincide (si corresponde). Si el proxy inverso conserva varias copias en lugar de solo el último valor visto y deja que el servidor especifique en cada solicitud cuál usar, sería ideal.
nginx requiere módulos de terceros para admitir ETag. Y hay dos de ellos.
fuente
Corrígeme si me equivoco, y sé que esta es una publicación antigua, pero me gustaría comentar para los nuevos transeúntes. Creo que un caché de proxy inverso no ayuda tanto como te gustaría cuando usas ETags.
Los mecanismos de validación de almacenamiento en caché utilizan el servidor de origen para validar si la ETag (o la fecha de la última modificación) en la solicitud sigue siendo válida (coincide o no con los recursos etag, dependiendo de qué encabezado se use o se haya / no se haya modificado desde la fecha indicada en la solicitud).
Esto significa que una memoria caché de proxy inverso, como Varnish, aún pasará esa solicitud al servidor de origen. Puede responder con la solicitud en lugar de que el servidor la maneje, pero no guardó el viaje de ida y vuelta al servidor de origen.
Los navegadores pueden almacenar en caché las respuestas y manejar una respuesta 304 en cualquier caso, por lo que la caché privada del usuario puede ser más adecuada para manejar esto que usar un proxy inverso (YMMV, especialmente a escala, y dependiendo de su caso de uso, por supuesto). desea hacer suposiciones sobre sus aplicaciones).
De la especificación 13.3 :
y luego nota 13.3.4 :
Por lo tanto, Varnish puede devolverle una respuesta, pero aún tiene un viaje de ida y vuelta al servidor. Si puede usar un caché de aplicaciones como APC o memcache, entonces eso podría valer la pena. Sin embargo, el almacenamiento en caché de validación es generalmente mejor para el ahorro de ancho de banda que para el ahorro de recursos del servidor.
El almacenamiento en caché de validación puede dejarse en manos del cliente (navegador o código api).
El uso del modelo de caducidad para el almacenamiento en caché es donde realmente brilla un caché de proxy inverso. Esto le permite omitir golpear el servidor de origen por completo. Utilizando
Expires
,Cache-Control
,Date
, etc, es el mejor (de nuevo, la OMI) para un mecanismo de caché de proxy inverso como el caché puede devolver la respuesta, suponiendo que no es rancio, sin tener que golpear el servidor de origen.fuente
Puede mirar Apache TrafficServer , que parece tener lo que necesita .
fuente
Hasta la fecha, creo que todavía no hay servidores proxy que admitan completamente esta especificación HTTP. Entonces, hace aproximadamente un año decidí escribir el mío usando Node.js y MongoDb.
https://github.com/colinmollenhour/node-caching-proxy
fuente