BAN url 在 Varnish 中获取参数

BAN url with get parameters in Varnish

我在 Varnish(版本 6.0.2)中禁止 url 时遇到问题。

我正在尝试禁止这样的 url

/api/v2/product?param1=value1&param2=value2param3=value3

如果我给出这个命令:

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

它工作正常,但它禁止所有以 /api/v2/product 开头的 url,我需要禁止特定的 url。

这些是我做过的尝试:

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

它不会 return 任何错误,但不会禁止 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'

它不会 return 任何错误,但不会禁止 url

我也试过不使用 Regex 使用 ==

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

它不会 return 任何错误,但不会禁止 url

我认为问题出在 ? 所以我尝试使用 .* 而不是 ?

我试过:

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

它起作用了,它禁止所有以 ^/api/v2/product&param1=value1 开头的 url,所以我试过了

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

它没有 return 任何错误,但它没有禁止 url,所以我怀疑这次问题可能是 & 所以我试过了:

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

但没什么,它不会 return 错误,但不会禁止 url。

任何尝试使用\return来转义特殊字符的错误信息:

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

Command failed with error code 100

Varnish 手册说软件使用 PCRE 标准,但我找不到为它编写正则表达式的方法。

如有任何帮助或建议,我们将不胜感激。

谢谢 H2K

我找到问题了,有一个

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

在代码中改变我的 get 参数的顺序使正则表达式无效。