![配置 varnish 根据 url 和授权标头使缓存失效](https://linux22.com/image/579789/%E9%85%8D%E7%BD%AE%20varnish%20%E6%A0%B9%E6%8D%AE%20url%20%E5%92%8C%E6%8E%88%E6%9D%83%E6%A0%87%E5%A4%B4%E4%BD%BF%E7%BC%93%E5%AD%98%E5%A4%B1%E6%95%88.png)
我想知道是否可以通过 url 使缓存的对象无效。
假设我有 url /api/0.1/user 和 url /api/0.1/userFriends,我想知道是否有办法在对 /api/0.1/userMedia 发出 PUT 请求时使 /api/0.1/user 无效。但是它只能通过 http 标头授权使缓存无效。因此基本上只能使执行 PUT 请求的用户的缓存无效。
我想我需要一个禁令配置才能使其工作,但是我对 varnish 还很陌生,因此如果能举个例子我将非常感谢!
答案1
应该是可以的。如果你在 vcl_recv 中有类似这样的内容:
sub vcl_recv {
if (req.request == "PUT") {
http.req.x-url = regsub(req.url, "(/api/0.1/user)Media", "\1");
ban_url("^" + x-url);
unset req.http.x-url;
}
}
这是完全未经测试的。有关 vcl 语法和语义的更多信息,请参阅“man vcl”。