我有一个继承的脚本,它使用shell_exec清除服务器上的清漆缓存。
我从来都不太喜欢使用shell_exec,但我不知道直接从PHP网页中清除缓存的另一种方法。
有其他方法可以做到这一点吗?
他们有一个用于此目的的REST API。你应该试试
除了Varnish的管理控制台(付费软件),Varnish还有从缓存中清除或禁止对象的vcl方法,但您需要在当前的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