Nginx map: несколько переменных для выбора кеша
Директива Nginx map вычисляет переменную из сочетания нескольких исходных значений. В примере кеш разрешён только для GET и HEAD на публичном пути /catalog, а для остальных комбинаций включается cache bypass и ответ не сохраняется. Так правило остаётся явным и его можно проверить по одному значению переменной.
Составить ключ из method и URI
Добавьте map на уровне http. Строка-источник соединяет request method и URI. Регулярные правила с ~ и якорями дают точное, чувствительное к регистру совпадение пути; обычные строковые ключи map регистронезависимы:
map "$request_method:$uri" $skip_cache {
default 1;
~^GET:/catalog$ 0;
~^HEAD:/catalog$ 0;
}Используйте переменную в location, где уже настроен proxy_cache:
proxy_cache_bypass $skip_cache;
proxy_no_cache $skip_cache;Несколько исходных переменных в map поддерживаются с Nginx 0.9.0. Директива разрешена в контексте http, не внутри server или location. Подставьте собственный путь и убедитесь, что существующая зона proxy_cache и proxy_pass настроены отдельно. Здесь $uri не включает query string; если параметры влияют на доступ или содержимое ответа, учтите их в правилах map. Не кешируйте персональные или авторизованные ответы без отдельной проверки.
Документация: ngx_http_map_module, proxy_cache_bypass и proxy_no_cache.