Cache de proxy NGINX - variável destruidora de cache na string de consulta - é possível ignorar?

Cache de proxy NGINX - variável destruidora de cache na string de consulta - é possível ignorar?

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

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

O parâmetro de string de consulta "parâmetro" varia entre as solicitações. O mesmo acontece com "paramater2".

O parâmetro de string de consulta r é um carimbo de data/hora que usamos para garantir que o cliente não forneça conteúdo em cache (no lado do cliente). Também conhecido como "destruidor de cache". Sim, também usamos todos os cabeçalhos apropriados para não armazenar em cache h.

Agora, gostaríamos de fazer proxy do cache via nginx para algumas dessas solicitações. É possível instruir o nginx a ignorar o parâmetro r querystring, mas usar todos os outros ao definir 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 de cache será única.

Obrigado.

Responder1

Encontrámos uma solução para esta questão.

O método correto de fazer isso é construir uma chave de cache usando $arg_...variáveis ​​nginx. $arg_...conterá parâmetros de string de consulta. Portanto, no exemplo acima, usaríamos $arg_parametere $arg_parameter2dentro da chave de cache.

O resultado nginx.confparece:

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

Observe que o parâmetro querystring contendo um hífen (traço), como data-*parâmetros, não funciona com a $arg_paramNamesintaxe. Uma solução alternativa usando Lua pode ser encontrada emesta postagem.

informação relacionada