Назад | Перейти на главную страницу

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

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

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