Como desativar o cache de proxy quando a string de consulta está vazia?

2

Com o nginx eu tenho

server {
  listen 1.2.3.4:80
  proxy_cache_valid       200 302 5m;
  location /  {
    try_files $uri @upstream;
    root $root;
  }
}

Quando eu vou http://example.com/foobar ele gera um redirecionamento para http://example.com/foobar?filter_distance=50&... que é dependente do visitante, então eu gostaria de não armazenar em cache este redirecionamento. Eu preciso ignorar o cache quando a seqüência de consulta está vazia. Estou um pouco perdido porque location /foobar irá corresponder a ambos.

    
por chx 19.08.2014 / 12:13

2 respostas

2

eu adicionei

map $request_uri $nocache {
  /foobar 1;
}

para a seção http e

proxy_cache_bypass $nocache;
proxy_no_cache $nocache;

para a seção do servidor. Isso parece estar funcionando.

    
por 20.08.2014 / 03:30
1

Você deve usar as diretivas proxy_cache_bypass e proxy_no_cache da seguinte forma:

set $nocache 0;

if ($arg_filter_distance = "") {
    set $nocache 1;
}

proxy_cache_bypass $nocache;
proxy_no_cache $nocache;

Definição de proxy_no_cache da documentação do nginx

Defines conditions under which the response will not be saved to a cache. If at least one value of the string parameters is not empty and is not equal to “0” then the response will not be saved:

Aqui testamos se o parâmetro GET filter_distance está vazio. Se estiver, definimos $ nocache como 1 e, em seguida, as diretivas proxy_cache_bypass e proxy_no_cache ficarão ativas.

Você pode adicionar outros parâmetros GET de forma semelhante, por exemplo, $arg_filter_type , se tiver um parâmetro filter_type GET.

    
por 19.08.2014 / 12:24

Tags