У нас есть следующий URL-адрес, по которому мы хотим проксировать кеш:
file.php?parameter=one¶mater2=two&r=EPOCHTIMESTAMP
Параметр строки запроса "параметр" варьируется между запросами. Так делает "paramater2".
Параметр строки запроса r - это метка времени, которую мы используем, чтобы убедиться, что клиент не обслуживает кэшированный (на стороне клиента) контент. Он же «очиститель тайников». Да, мы также используем все подходящие h-заголовки без кеширования.
Теперь мы хотели бы прокси-кешировать некоторые из этих запросов через nginx. Можно ли указать nginx игнорировать параметр r querystring, но использовать все остальные при установке ключа кеширования для записи? Если мы не можем игнорировать параметр r, тогда кеш прокси nginx будет бесполезен, поскольку каждый ключ кеша будет уникальным.
Спасибо.
Мы нашли решение этого вопроса.
Правильный метод сделать это - создать ключ кеша с помощью nginx. $arg_...
переменные. $arg_...
будет содержать параметры строки запроса. Итак, в приведенном выше примере мы будем использовать $arg_parameter
и $arg_parameter2
внутри ключа кеша.
Результат в nginx.conf
выглядит как:
http {
...
server {
location / {
...
proxy_cache_key $scheme$proxy_host$uri$is_args$arg_parameter$arg_parameter2;
}
}
...
}
Обратите внимание, что параметр строки запроса, содержащий дефис (тире), например data-*
параметры, не работают с $arg_paramName
синтаксис. Обходной путь с использованием Lua можно найти в эта почта.