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.
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.
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.
Tags nginx