Кэширование прокси-сервера NGINX — переменная cache buster в строке запроса — можно ли ее игнорировать?

Кэширование прокси-сервера NGINX — переменная cache buster в строке запроса — можно ли ее игнорировать?

У нас есть следующий URL-адрес, который мы хотели бы проксировать в кэш:

file.php?parameter=one&paramater2=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 можно найти вэта почта.

Связанный контент