proxy inverso nginx, ¿cuándo usar caché vs tienda?

8

Estoy en el proceso de reestructurar la pila web de mi proyecto para: nginx -> haproxy -> muchas instancias (apache / rails de pasajeros)

Algunos de los objetivos incluyen:

  • ubicación única para el almacenamiento en caché de la página (actualmente se realiza mediante rieles en cada máquina apache)
  • contenido estático más rápido
  • eliminar ssl de la tubería interna
  • registro de ip (previamente perdido debido a la ejecución de haproxy en modo tcp)

Los recursos de imagen / hoja de estilo / javascript están almacenados en caché, con encabezados apropiados. El almacenamiento en caché de nuestra página se basa en parámetros internos y no debe responder a los controles típicos de caché. Para lograr estos fines, nuestra configuración se parece a

server {

    ...

    location /really_slow_dynamic_content/ {
        root /var/www/tmp;
        error_page 404 = @fetch;
    }

    location @fetch {
        internal;
        proxy_pass   haproxy_ip;
        proxy_store  /var/www/tmp${uri}_cache.html;
        proxy_store_access  user:rw  group:rw  all:r;
    }

    location /assets/ {
        proxy_pass   haproxy_ip;
        proxy_cache  assets;
    }

    location / {
        proxy_pass   haproxy_ip;
    }
}

No soy realmente un administrador de sistemas, y sé que hay muchas alternativas / ajustes / adiciones que podrían ser útiles. Tampoco entiendo la diferencia entre proxy_cache y proxy_store. Entonces, a mi pregunta real ...

Hasta que traslademos los activos a la máquina nginx, ¿tiene sentido usar proxy_cache para activos y proxy_store para contenido dinámico lento?

Además, si hay otras consideraciones o software que debería considerar, me encantaría saber de ellos. ¡Gracias!


Desde que publiqué esta pregunta, me di cuenta de que la configuración inicial que usé no usa la tienda en absoluto, y que la página de error y la configuración interna del ejemplo wiki oficial (¿semi?) No eran exactamente opcionales (la configuración se actualizó aquí desde parece estar funcionando, y una configuración de trabajo parece un mejor legado para esta pregunta). Por lo tanto, usar la tienda para crear páginas completas (y raramente actualizadas) de forma lenta, y el caché real para imágenes, javascript y demás, parece estar funcionando bastante bien para nosotros. Aceptaré la única respuesta, ya que al menos me dio una pista para rastrear mi problema, pero todavía no tengo la sensación de si estoy usando o no las dos directivas de la manera para la que estaban destinadas o no (bueno, al menos no con respecto a la tienda, el caché parece un poco más obvio).

Chris
fuente
Para propósitos heredados, esta discusión fue muy útil para mí al tratar estos temas. ruby-forum.com/topic/140396
Chris

Respuestas:

3

Si la memoria me sirve correctamente, proxy_store almacena una representación binaria de una solicitud de un elemento, mientras que proxy_cache almacena una copia en caché del elemento en su forma base.

proxy_cache es en realidad un motor de almacenamiento en caché adecuado con múltiples niveles y es adecuado para almacenar contenido de múltiples sitios utilizando las mismas claves.

Personalmente uso proxy_caché para almacenar más de 2 mil millones de imágenes de productos en cada uno de nuestros servidores de contenido estático.

Kura
fuente
1

proxy_store se usa para crear un espejo de objetos 'a pedido'. Coloca los elementos en la misma ruta en la que existe el elemento dado en el back-end.

En el caso de contenido dinámico lento, proxy_cache es más apropiado, ya que admite la expiración de la memoria caché.

Un ejemplo de dónde proxy_store es más útil podría ser un espejo de archivos rpm donde un nombre de archivo / versión nunca tendrá que caducar .

Luke Chadwick
fuente