Varnish 禁止查询字符串

Varnish 禁止查询字符串

我正在尝试在 Varnish 4 中设置禁令。我在 vcl_recv 中有这个:

    ban("req.http.host == " +req.http.host+" && req.url ~ "+req.url);
    return(synth(200, "Ban added"));

当我发出请求时,它确实说禁止添加,并且我确实使用 varnishadm 在 ban.list 中看到了它:

1499676469.672070     0    req.http.host == something.com && req.url ~ /some/path?q=*

除了它不起作用之外,什么都不会失效。如果我尝试禁止 path*,它似乎适用于“常规”文件,例如 path.css,但它似乎永远不会根据查询字符串使 URL 无效。我还需要做些什么才能让它考虑查询字符串吗?查询字符串非常难以阅读,充满了 % 代码,如果这很重要的话。

谢谢

答案1

我认为您正在寻找PURGE。它会更有效,并且会使您在 PURGE 请求中请求的任何 URL 无效。在 中vcl_recv添加:

if (req.method == "PURGE") {
    # If not allowed then a error 405 is returned
    if (!client.ip ~ purge) {
        return(synth(405, "This IP is not allowed to send PURGE requests."));
    }
    return (purge);
}

接下来,使缓存中的页面无效:

curl -X PURGE http://127.0.0.1/your-super-request-with-params -H "Host: example.com"

如果您确实想要BANs(您真的必须这样做吗?),那么不要使用 REGEX 匹配 ( ~) 来使特定 URL 无效,因为它很可能会将?和其他查询参数解释为引擎标志。所以:

ban("req.http.host == " + req.http.host + " && req.url = " + req.url);
return(synth(200, "Ban added"));

相关内容