ЗАПРЕТИТЬ URL с параметрами get в Varnish

#regex #pcre #varnish

#регулярное выражение #pcre #varnish

Вопрос:

У меня возникла проблема с запретом URL внутри Varnish (версия 6.0.2).

Я пытаюсь запретить URL, подобный этому

 /api/v2/product?param1=value1amp;param2=value2param3=value3
  

Если я дам эту команду:

 varnishadm ban req.url '~' '^/api/v2/product'
  

Это работает правильно, но оно запрещает все URL, начинающиеся с /api/v2/product , и мне нужно запретить только этот конкретный URL.

Это попытки, которые я сделал:

 varnishadm ban req.url '~' '^/api/v2/product?param1=value1amp;param2=value2param3=value3'
  

Оно не возвращает никакой ошибки, но и не запрещает URL

 varnishadm ban req.url '~' '^/api/v2/product?param1=value1'
  

и я получаю эту ошибку:

 Unknown request.
Type 'help' for more info.
Syntax Error: Invalid backslash sequence

Command failed with error code 100
  
 varnishadm ban req.url '~' '^/api/v2/product[?]param1=value1'
  

или

 varnishadm ban req.url '~' '^/api/v2/product\?param1=value1'
  

Оно не возвращает никакой ошибки, но и не запрещает URL

Я пробовал также без регулярных выражений, используя ==

 varnishadm ban req.url '==' '/api/v2/product?param1=value1amp;param2=value2param3=value3'
  

Оно не возвращает никакой ошибки, но и не запрещает URL

Я думал, что проблема в ? поэтому я попытался использовать .* вместо ?

Я пытался:

 varnishadm ban req.url '~' '^/api/v2/product.*param1=value1'
  

И это работает, оно запрещает все URL, начинающиеся с: ^/api/v2/productamp;param1=value1 итак, я попробовал

 varnishadm ban req.url '~' '^/api/v2/product.*param1=value1amp;param2=value2'
  

Оно не возвращает никакой ошибки, но и не запрещает URL, поэтому я предположил, что проблема может быть в amp; этом разе, поэтому я попытался:

 varnishadm ban req.url '~' '^/api/v2/product.*param1=value1.*param2=value2'
  

Но ничего, это не возвращает ошибок, но и не запрещает этот URL.

Любая попытка экранировать специальный символ с помощью возвращает сообщение об ошибке:

 Unknown request.
Type 'help' for more info.
Syntax Error: Invalid backslash sequence

Command failed with error code 100
  

В руководстве Varnish говорится, что программное обеспечение использует стандарты PCRE, но я не могу найти способ написать для него регулярное выражение.

Любая помощь или предложения будут действительно оценены.

Спасибо H2K

Ответ №1:

Я нашел проблему, там был

 set req.url = std.querysort(req.url);
  

внутри кода, который изменял порядок моих параметров get, делая регулярное выражение недействительным.