Скажем, мой ключ кеша NGINX выглядит так:
uwsgi_cache_key $scheme$host$request_method$request_uri;
... и это в основном то, что я хочу. Я хочу, чтобы NGINX создавал ключ кеша на основе всего URL-адреса, включая строку запроса. Так что
https://example.com/?a=1&b=1
и
https://example.com/?a=1&b=2
... это отдельные страницы, отдельно кешированные.
Однако говорят, что есть и другие параметры - c
и d
- что я не хочу влиять на ключ кеша. Другими словами, я хочу
https://example.com/
и
https://example.com/?c=1
и
https://example.com/?c=2
и
https://example.com/?c=1&d=2
... чтобы вернуть ту же страницу из кеша.
И я хочу
https://example.com/?a=1
и
https://example.com/?a=1&d=2
и
https://example.com/?a=1&c=1&d=3
... чтобы вернуть ту же страницу из кеша, которая отличается от страницы в случае 1.
Я ищу способ построить uwsgi_cache_key
так что он может объяснить эти случаи. Я не хочу делать это через перенаправления.
Количество параметров, которые я хочу игнорировать при построении ключа - c
и d
, в данном примере - ограничено; количество чисел или параметров, которые я не хочу игнорировать, - нет.
Как бы вы это сделали? (Да, это в основном о fbclid
и utm_*
и их кузены.)
ОБНОВИТЬ:
Вот переписанное решение @tero-kilkanen с map
, в случаях, когда fbclid
и launcher
являются нежелательными параметрами. Не знаю, насколько это замедляет ответы.
map $args $cachestep1 {
default $args;
~^(fbclid=[^&]*&?)(.*)$ $2;
~^([^&]*)(&fbclid=[^&]*)(&?.*)$ $1$3;
}
map $cachestep1 $cacheargs {
default $cachestep1;
~^(launcher=[^&]*&?)(.*)$ $2;
~^([^&]*)(&launcher=[^&]*)(&?.*)$ $1$3;
}
Я не тестировал такой подход, но думаю, что он может сработать:
map $args $cacheargs {
~^(.*)a=.+&(.*)$ $1$2;
}
map $cacheargs $cacheargs1 {
~^(.*)b=.+&(.*)$ $1$2;
}
uwsgi_cache_key $scheme$host$request_method$uri$cacheargs1;
Первая карта удаляется a=.+
из $args
и записывает это в $cacheargs
.
Вторая карта удаляет b=.+
из $ cacheargsand records it to
$ cacheargs1`.
затем $cacheargs1
используется как часть ключа кеша.
Оригинальный ответ ниже.
Ты можешь использовать:
uwsgi_cache_key $scheme$host$request_method$uri$arg_a$arg_b;
Это означает, что ключ кеша создается с использованием нормализованного URI (без аргументов запроса) и аргументов запроса. a
и b
.