我看不到类似的问题,但如果我正在重复,请道歉。
我们正在我们的系统上运行清漆缓存,但是想要安装一个系统,我们可以在编辑时清除单个页面(相当正常)。我们一直试图通过使用HTTP标头来使其工作。所以,我们的VCL设置如下:
acl purge {
"localhost";
#### Our server IP #####
}
sub vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
return (lookup);
}
}
sub vcl_hit {
if (req.request == "PURGE") {
purge;
}
}
sub vcl_miss {
if (req.request == "PURGE") {
purge;
}
}
但是,我仍然坚持如何实际发送http清除请求。我们在网站上使用PHP,所以我尝试使用:
header("PL: PURGE / HTTP/1.0");
header("Host: url to purge");
但这似乎没有做任何事情(varnishlog似乎没有显示任何清除)。
我也尝试过cURL但是,它似乎并没有起作用。我在这里遗漏了一些非常基本的东西,或者是基础声音,这意味着我的实现被窃听了吗?
非常感谢,
答案 0 :(得分:34)
您需要发出HTTP请求。
未经测试,但应该是(如果你想使用你提到的卷曲):
$curl = curl_init("http://your.varnish.cache/url-to-purge");
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PURGE");
curl_exec($curl);
答案 1 :(得分:3)
您也可以使用命令行进行清除。使用命令sudo varnishadm
。这将打开Varnish命令行界面。您可以在其中键入命令以根据需要清除页面。例如,要清除主页,请执行以下操作:
root@staging:/etc/varnish# sudo varnishadm
200
-----------------------------
Varnish Cache CLI 1.0
-----------------------------
Linux,3.5.0-28-generic,x86_64,-sfile,-smalloc,-hcritbit
Type 'help' for command list.
Type 'quit' to close CLI session.
varnish> ban.url ^/$
200
答案 2 :(得分:2)
快速,肮脏且有效的方式发送PURGE请求:
curl -v -k -X PURGE URL
您实际上可以使用该语句创建一个小脚本,如下所示:
1)在示例VI中打开一个编辑器
vi varnish_purge_url.sh
2)输入以下文字:
#!/bin/sh
curl -v -k -X PURGE $1
(记得在第一行和最后一行之间留空行。)
3)保存文件并退出。然后设置适当的属性以从shell执行它:
chmod 750 varnish_purge_url.sh
4)您希望在创建和使用上述脚本时成为root用户。如果使用Ubuntu,请在需要时随意在命令前面添加sudo
。
5)用法很简单:
./varnish_purge_url.sh URL
其中URL
是要清除的网址。
答案 3 :(得分:-1)
也许我的版本较新,但上面的内容对我不起作用。这样做了:
sub vcl_hit {
if (req.request == "PURGE") {
ban("req.url ~ "+req.url);
error 200 "Purged.";
}
}