正则表达式问题通过curl向Varnish服务器发送BAN请求

时间:2015-12-24 14:32:21

标签: regex curl varnish varnish-4

我一直在尝试通过curlVarnish服务器发送curl -X BAN "https://oursite.com/product/item/(100|7|9||8|7|6|5|4|2|1)"请求,以使缓存的内容无效。该网址包含一些Varnish的正则表达式以进行检查。我已成功发送此请求:

1。     <!DOCTYPE html> <html> <head> <title>200 Ban added</title> </head> <body> <h1>Error 200 Ban added</h1> <p>Ban added</p> <h3>Guru Meditation:</h3> <p>XID: 66211</p> <hr> <p>Varnish cache server</p> </body> </html>

curl -X BAN "https://oursite.com/product/(search/home$|item/(391|1232))"

但有一个更复杂的网址

2。     // What I'm trying to remove are: 1./product/search/home 2./product/item/391 3./product/item/1232

if (req.method == "BAN") {

        if (!client.ip ~ purge) {

            return(synth(403, "Not allowed."));
        }

        ban("req.url ~ ^"+req.url);

        return(synth(200, "Ban added"));
}

default.vcl

*   << BeReq    >> 163855
-   Begin          bereq 163854 pass
-   Timestamp      Start: 1450969228.080453 0.000000 0.000000
-   BereqMethod    BAN
-   BereqURL       /product/(search/home$|item/(391|1232))
-   BereqProtocol  HTTP/1.1
-   BereqHeader    User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
-   BereqHeader    Host: oursite.com

清漆日志:

varnishlog

curl请求已成功完成,如{{1}}所示,但我不知道为什么正则表达式不起作用。没有页面被清除。 谁能告诉我这是什么问题?我需要逃脱哪些角色?

1 个答案:

答案 0 :(得分:0)

正则表达式看起来很好 我认为你应该尝试在第一个括号后转义斜杠。我假设Varnish将括号之间的表达式解释为正则表达式(这很好),而正则表达式斜杠则是分隔符(某种特殊字符)。
这可能有效:

curl -X BAN "https://oursite.com/product/(search\/home$|item\/(391|1232))"