0

强制缓存未命中说明指出:

强制缓存未命中不会驱逐旧内容。这意味着这会导致 Varnish 在缓存中拥有多个内容副本。在这种情况下,总是使用最新的副本。请记住,只要它们的生存时间是正数,重复的对象就会一直存在。

我不想在缓存中保留多个副本。我启动网址的方法是否有效?我通过将旧内容添加到禁令潜伏者来手动驱逐​​旧内容。然后强制缓存错过自己替换被禁止的内容。

acl purge_prime {
    "127.0.0.1";
    "::1";
}

sub vcl_recv {
    if (req.method == "PRIME") {
        if (!client.ip ~ purge_prime) {
            return(synth(405,"No priming for you. (" + client.ip + ")"));
        }
        # Add to the ban lurker. Purging existing pages.
        ban("obj.http.x-host == " + req.http.host + " && obj.http.x-url == " + req.url);
        # Call the backend to fetch new content and add it to the cache.
        set req.method = "GET";
        set req.hash_always_miss = true;
    }
    # ... other custom rules.
}

# ... other subroutines below, e.g. adding ban-lurker support etc.

这个逻辑对我来说是有道理的,我只是担心,因为没有其他人做过(我假设这是有原因的)。

这是使用purge with restart的错误方法吗?如果是这样,使用单个 http 请求启动 url 的最佳方法是什么?

4

1 回答 1

0

我想您的方法根本不好,因为它使用了禁令。使用清除而不是禁令将允许您利用宽限模式。

重新启动非常好 - 它们不会导致两个或更多 HTTP 请求,而是再次通过 VCL 状态机推送请求。

于 2017-08-22T21:00:39.977 回答