proxy reverso nginx, quando usar cache vs armazenamento?

8

Estou no processo de reestruturar a pilha da web do meu projeto para: nginx -> haproxy -> muitas instâncias (apache / passenger rails)

Alguns dos objetivos incluem:

  • local único para armazenamento em cache de página (atualmente feito via trilhos em cada máquina apache)
  • conteúdo estático mais rápido
  • remover ssl do pipeline interno
  • registro de ip (anteriormente perdido devido à execução de haproxy no modo tcp)

Os recursos de image / stylesheet / javascript são armazenados em cache em cache, com cabeçalhos apropriados. Nosso cache de páginas é baseado em parâmetros internos e não deve responder aos controles de cache típicos. Para atingir esses objetivos, nossa configuração se parece com

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;
    }
}

Eu não sou realmente um administrador de sistemas e sei que existem muitas alternativas / ajustes / adições que podem ser úteis. Também não entendo bem a diferença entre proxy_cache e proxy_store. Então, para a minha pergunta real ...

Até movermos os ativos para a máquina nginx, faz sentido usar proxy_cache para ativos e proxy_store para conteúdo dinâmico lento?

Além disso, se houver outras considerações ou software que eu deva considerar, adoraria ouvir sobre elas. Obrigado!


Desde que postei essa pergunta, percebi que a configuração inicial que eu usei não usa a loja e que a página de erro e as configurações internas do exemplo wiki oficial (semi?) Não eram exatamente opcionais (configuração atualizada aqui desde parece estar funcionando, e uma configuração de trabalho parece ser um legado melhor para esta questão). Portanto, o uso da loja para páginas completas de criação lenta (e raramente atualizadas) e o cache real de imagens, javascript e outros parecem estar funcionando muito bem para nós. Aceitarei a única resposta, uma vez que pelo menos me deu uma pista para localizar meu problema, mas ainda não tenho noção se estou usando ou não as duas diretivas da maneira a que elas se destinam. ou não (bem, pelo menos não em relação à loja, o cache parece um pouco mais óbvio).

Chris
fonte
Para propósitos legados, essa discussão foi muito útil para mim ao lidar com esses problemas. ruby-forum.com/topic/140396
Chris

Respostas:

3

Se a memória me servir corretamente, proxy_store armazena uma representação binária de uma solicitação para um item, enquanto proxy_cache armazena uma cópia em cache do item em seu formulário base.

proxy_cache é realmente um mecanismo de armazenamento em cache adequado com vários níveis e é adequado para armazenar conteúdo de vários sites usando as mesmas chaves.

Pessoalmente, uso o proxy_cache para armazenar mais de 2 bilhões de imagens de produtos em cada um de nossos servidores de conteúdo estático.

Kura
fonte
1

proxy_store é usado para criar um espelho de objetos 'sob demanda'. Ele coloca os itens no mesmo caminho em que o item fornecido existe no back-end.

No caso de conteúdo dinâmico lento, proxy_cache é mais apropriado, pois suporta a expiração do cache.

Um exemplo de onde o proxy_store é mais útil pode ser um espelho dos arquivos rpm em que um nome de arquivo / versão nunca precisará expirar .

Luke Chadwick
fonte