Temos o seguinte URL que gostaríamos de fazer proxy do cache:
file.php?parameter=one¶mater2=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_parameter
e $arg_parameter2
dentro da chave de cache.
O resultado nginx.conf
parece:
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_paramName
sintaxe. Uma solução alternativa usando Lua pode ser encontrada emesta postagem.