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