Varnish 3无法正确解析正则表达式模式

时间:2014-07-25 14:38:18

标签: regex varnish varnish-vcl

我正在处理一些生成PCRE模式的代码,这些模式用于禁止清漆中的对象,并且有清漆问题告诉我模式无效。

这是我的代码

生成的模式之一
(?i)(((^| )page\-2[^ ]*($| )))

这就是清漆告诉我的东西

 0 Debug        - "REGEX: <missing )>"

13 RxRequest    c BAN
13 RxURL        c /
13 RxProtocol   c HTTP/1.1
13 RxHeader     c User-Agent: curl/7.34.0
13 RxHeader     c Accept: */*
13 RxHeader     c Host: www.test.local
13 RxHeader     c X-Tags: (?i)(((^| )page\-2[^ ]*($| )))

我甚至尝试在测试过程中简化模式

page-2[^ ]
page\-2[^ ]

我得到了这个

 0 Debug        - "REGEX: <missing terminating ] for character class>"

像这样的简单模式

page-2.*

我正在运行varnish-3.0.2 revision cbf1284

相关的VCL是

if (req.request == "BAN") {
    ban("obj.http.X-Tags ~ " + req.http.X-Tags);
    error 200 "Banned";
}

而且,很明显原始模式是有效的 Regular expression visualization

1 个答案:

答案 0 :(得分:2)

显然,正如我在原始问题的评论中偶然发现的那样,清漆并不像正则表达式中的空间文字那样。在这种情况下,解决方案是将空格文本替换为\s,它匹配任何空格字符,包括空格,制表符和换行符。