Usando nginx e / ou verniz para fazer cache de redirecionamentos 301 gerados pelo servidor

2

Estou implementando uma espécie de serviço de redução de URL. O que acontece é que eu tenho algum servidor de aplicativos de back-end que recebe uma solicitação, faz alguma computação e retorna um URL redirecionado 301 para o upstream de um frontend nginx:

request --->   nginx  ---->  app_server

O que eu quero fazer é armazenar em cache este URL de 301 retornado para o mesmo pedido (um URL específico com um "código abreviado").

O nginx faz esse cache automaticamente? Ou devo colocar algo como verniz entre o nginx e o app_server? Eu posso facilmente armazenar em cache isso no memcache, mas isso exigiria bater o app_server, que tenho certeza que pode ser dispensado após a primeira solicitação.

Obrigado.

    
por rlotun 08.12.2010 / 19:27

3 respostas

3

Você pode configurar o Nginx para fazer isso.

Exemplo: para armazenar em cache um redirecionamento (301 ou 302) até 60 minutos:

proxy_cache_valid 301 302 60m;
    
por 10.04.2012 / 16:23
0

Eu também estou pesquisando isso e pelo que eu entendo que o Varnish redireciona muito indiretamente. E o mesmo para o cache de proxy no Nginx. Então, pelo que entendi, precisamos de Varnish para caching e upstream e Nginx apenas para redirecionamentos?

Isso provavelmente não é específico para o seu aplicativo.

    
por 26.01.2011 / 18:52
0

O Varnish armazena em cache quaisquer respostas HTTP que correspondam à sua lógica e os redirecionamentos são simplesmente respostas HTTP 301 ou 302 que podem ser armazenadas facilmente. Claro, você pode substituir a lógica padrão através da linguagem VCL do Varnish.

Nossos caches do servidor Varnish redirecionam automaticamente. Você controla o TTL do cache definindo um cabeçalho 'Cache-Control: max-age' (ou Expira) em sua resposta de back-end. Se você não especificar um TTL, acredito que o padrão seja 120s. Certifique-se de não definir cookies no domínio ou descartá-los quando eles entram em verniz, ou os pedidos passarão pelo verniz. Simplesmente criamos um subdomínio separado para redirecionamentos e descartamos explicitamente os cookies de entrada e saída via VCL.

Como uma observação para outros casos de uso: Você pode descarregar redirecionamentos para o Varnish por completo, para que eles nunca atinjam o back-end. Algum código de exemplo: link

    
por 29.08.2012 / 11:19