如何在清漆中发送清除请求

时间:2012-02-09 17:21:17

标签: php varnish

我看不到类似的问题,但如果我正在重复,请道歉。

我们正在我们的系统上运行清漆缓存,但是想要安装一个系统,我们可以在编辑时清除单个页面(相当正常)。我们一直试图通过使用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但是,它似乎并没有起作用。我在这里遗漏了一些非常基本的东西,或者是基础声音,这意味着我的实现被窃听了吗?

非常感谢,

4 个答案:

答案 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.";
  }
}
相关问题