BAN url 在 Varnish 中获取参数
BAN url with get parameters in Varnish
我在 Varnish(版本 6.0.2)中禁止 url 时遇到问题。
我正在尝试禁止这样的 url
/api/v2/product?param1=value1¶m2=value2param3=value3
如果我给出这个命令:
varnishadm ban req.url '~' '^/api/v2/product'
它工作正常,但它禁止所有以 /api/v2/product
开头的 url,我需要禁止特定的 url。
这些是我做过的尝试:
varnishadm ban req.url '~' '^/api/v2/product?param1=value1¶m2=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¶m2=value2param3=value3'
它不会 return 任何错误,但不会禁止 url
我认为问题出在 ?
所以我尝试使用 .*
而不是 ?
我试过:
varnishadm ban req.url '~' '^/api/v2/product.*param1=value1'
它起作用了,它禁止所有以 ^/api/v2/product¶m1=value1
开头的 url,所以我试过了
varnishadm ban req.url '~' '^/api/v2/product.*param1=value1¶m2=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 参数的顺序使正则表达式无效。
我在 Varnish(版本 6.0.2)中禁止 url 时遇到问题。
我正在尝试禁止这样的 url
/api/v2/product?param1=value1¶m2=value2param3=value3
如果我给出这个命令:
varnishadm ban req.url '~' '^/api/v2/product'
它工作正常,但它禁止所有以 /api/v2/product
开头的 url,我需要禁止特定的 url。
这些是我做过的尝试:
varnishadm ban req.url '~' '^/api/v2/product?param1=value1¶m2=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¶m2=value2param3=value3'
它不会 return 任何错误,但不会禁止 url
我认为问题出在 ?
所以我尝试使用 .*
而不是 ?
我试过:
varnishadm ban req.url '~' '^/api/v2/product.*param1=value1'
它起作用了,它禁止所有以 ^/api/v2/product¶m1=value1
开头的 url,所以我试过了
varnishadm ban req.url '~' '^/api/v2/product.*param1=value1¶m2=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 参数的顺序使正则表达式无效。