NGINX - установка переменной с помощью regex replace

Я хочу улучшить кеширование nginx, удалив из запроса нерелевантные параметры запроса (которые могут исходить от веб-сканеров или аналогичных). Я в Интернете нашелгромоздкое решение :

      set $c_uri $args; # e.g. "param1=true&param4=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, мог взвесить здесь и помочь мне. Спасибо :)

0 ответов

Другие вопросы по тегам