用于清除PHP中的varnish的shell_exec的替代方法

时间:2013-12-05 18:05:26

标签: php varnish

我有一个我继承的脚本,它使用shell_exec清除服务器上的varnish cache。

我从未成为使用shell_exec的忠实粉丝,但我不知道直接从PHP网页清除缓存的另一种方法。

还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

为此目的,他们有一个REST API。你应该尝试一下

答案 1 :(得分:0)

除了Varnish的管理控制台(付费软件),Varnish还有vcl方法来清除或禁止缓存中的objets,但是你需要为当前的VCL配置添加一些逻辑[1] [2]

最好的方法取决于您想要实现什么,清除单个对象,执行完整的网站清理......

支持完整主机清理的逻辑:

acl purgers {
    "127.0.0.1";
    "192.168.0.0"/24;
}

sub vcl_recv {
    if (req.request == "BAN") {
        if (!client.ip ~ purgers) {
           error 405 "Method not allowed";
        }
        else {
           ban("obj.http.x-url ~ "/" && obj.http.x-host ~ " + req.http.host);
           error 200 "Banned";
        }
    }
}

支持单个对象清除的逻辑(来自Varnish Book):

acl purgers {
    "127.0.0.1";
    "192.168.0.0"/24;
}

sub vcl_recv {
    if (req.request == "PURGE") {
            if (!client.ip ~ purgers) {
                    error 405 "Method not allowed";
            }
            return (lookup);
    }
}

sub vcl_hit {
    if (req.request == "PURGE") {
            purge;
            error 200 "Purged";
    }
}
sub vcl_miss {
    if (req.request == "PURGE") {
            purge;
            error 404 "Not in cache";
    }
}
sub vcl_pass {
    if (req.request == "PURGE") {
            error 502 "PURGE on a passed object";
    }
}

[1] https://www.varnish-cache.org/docs/3.0/tutorial/purging.html

[2] https://www.varnish-software.com/static/book/Cache_invalidation.html