NGINX - установка переменной с помощью regex replace
Я хочу улучшить кеширование nginx, удалив из запроса нерелевантные параметры запроса (которые могут исходить от веб-сканеров или аналогичных). Я в Интернете нашелгромоздкое решение :
set $c_uri $args; # e.g. "param1=true¶m4=false"
# remove unwanted parameters one by one
if ($c_uri ~ (.*)(?:&|^)pd=[^&]*(.*)) { set $c_uri $1$2 ; }
if ($c_uri ~ (.*)(?:&|^)mid=[^&]*(.*)) { set $c_uri $1$2 ; }
if ($c_uri ~ (.*)(?:&|^)ml=[^&]*(.*)) { set $c_uri $1$2 ; }
if ($c_uri ~ (.*)(?:&|^)contact_eid=[^&]*(.*)) { set $c_uri $1$2 ; }
...
set $c_uri $scheme://$host$uri$c_uri;
...
location / {
# set $c_uri as cache_key
proxy_cache_key $c_uri;
...
}
Это работает, но не очень лаконично, требует много шагов, и из того, что я узнал, это зло .
Я знаю, что есть карты, которые могут выполнять базовые операции с регулярными выражениями, но они не работают в этом сценарии (потому что может быть любое количество параметров в любом порядке, который мне нужно удалить).
Я также нашел этот модуль замены, который может заменять регулярное выражение, но он предназначен только для определенных операций, а не для установки переменной.
Итак, у меня есть два вопроса:
- Кто-нибудь знает, есть ли какой-то инструмент для установки переменной, выполняя операцию замены регулярного выражения?
- Используется ли в этом случае действительно так плохо? Это не внутри контекста местоположения, и я не знаю, действительно ли много последовательных регулярных выражений хуже, чем одна замена большого регулярного выражения.
Я был бы очень благодарен, если бы кто-нибудь, обладающий большим ноу-хау nginx, мог взвесить здесь и помочь мне. Спасибо :)