我正在尝试在 Varnish 4 中设置禁令。我在 vcl_recv 中有这个:
ban("req.http.host == " +req.http.host+" && req.url ~ "+req.url);
return(synth(200, "Ban added"));
当我提出请求时,它确实说添加了禁令,并且我确实看到它 un the ban.list with varnishadm :
1499676469.672070 0 req.http.host == something.com && req.url ~ /some/path?q=*
除了它不起作用,没有任何东西会失效。如果我尝试禁止 path* 它似乎适用于“常规”文件,例如 path.css,但它看起来永远不会基于查询字符串使 URL 无效。我还需要做些什么来让它考虑查询字符串吗?查询字符串非常不可读,充满了 % 代码,如果这很重要的话。
谢谢
我想你正在寻找
PURGE
。它会更有效,并且会使您在 PURGE 请求中请求的任何 URL 无效。在vcl_recv
中,添加:接下来,使缓存中的页面无效:
如果你真的想要
BAN
s 代替(你真的需要吗?),那么不要使用正则表达式匹配 (~
) 来使特定 URL 无效,因为它很可能会将?
其他查询参数解释为引擎标志。所以: