Cache de proxy NGINX - variável de cache buster em querystring - é possível ignorar?

3

Temos o seguinte url que gostaríamos de fazer cache de proxy:

file.php?parameter=one&paramater2=two&r=EPOCHTIMESTAMP

Parâmetro da string de consulta "parameter" varia entre as solicitações. Então, "paramater2".

O parâmetro de string de consulta r é um timestamp que usamos para garantir que o cliente não atenda ao conteúdo em cache (no lado do cliente). Aka "cache buster". Sim, nós também usamos todo o apropriado, não armazene em cache os cabeçalhos.

Agora, gostaríamos de usar o cache proxy do nginx em algumas dessas solicitações. É possível instruir o nginx a ignorar o parâmetro querystring, mas usar todos os outros ao configurar uma chave de cache para a entrada? Se não pudermos ignorar o parâmetro r, o cache do proxy nginx será inútil, pois cada chave do cache será única.

Obrigado.

    
por anonymous-one 27.08.2012 / 13:46

1 resposta

4

Encontramos uma solução para essa pergunta.

O método correto de fazer isso é construir uma chave de cache usando nginx $arg_... variables. $arg_... conterá parâmetros de string de consulta. Portanto, no exemplo acima, usaríamos $arg_parameter e $arg_parameter2 dentro da chave de cache.

O resultado no nginx.conf se parece com:

http {
  ...
    server {
      location / {
         ...
         proxy_cache_key $scheme$proxy_host$uri$is_args$arg_parameter$arg_parameter2;
      }
    }
  ...
}

Observe que o parâmetro querystring que contém um hífen (traço), como data-* parameters, não funciona com a sintaxe $arg_paramName . Uma solução alternativa usando Lua pode ser encontrada em esta postagem .

    
por 28.08.2012 / 14:52