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

flu*_*ume 21 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;
        }
}
Run Code Online (Sandbox Code Playgroud)

但是,我仍然坚持如何实际发送http清除请求.我们在网站上使用PHP,所以我尝试过使用:

header("PL: PURGE / HTTP/1.0");
header("Host: url to purge");
Run Code Online (Sandbox Code Playgroud)

但这似乎没有做任何事情(varnishlog似乎没有显示任何清除).

我也尝试过cURL但是,它似乎并没有起作用.我在这里遗漏了一些非常基本的东西,还是基础声音,这意味着我的实现被窃听了?

非常感谢,

Jer*_*man 36

你需要去发一个HTTP请求.

未经测试,但应该是(如果你想使用你提到的卷曲):

$curl = curl_init("http://your.varnish.cache/url-to-purge");
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PURGE");
curl_exec($curl);
Run Code Online (Sandbox Code Playgroud)

  • 是的,PURGE是一个HTTP请求,就像GET或POST一样 - 虽然它是后期的RFC 2616,但它被内容缓存和代理使用,如Squid,Varnish和Apache Traffic Server.一个快速的谷歌"PURGE curl_setopt"引发了[这个例子](http://www.rwahyudi.com/linux/purge-squid-cache-using-curl-without-squidclient/).请享用 :) (2认同)

Dar*_*lli 5

发送 PURGE 请求的快速、肮脏和有效的方式:

curl -v -k -X PURGE URL
Run Code Online (Sandbox Code Playgroud)

您实际上可以使用该语句编写一个小脚本,如下所示:

1)打开一个编辑器,在例子VI中

 vi varnish_purge_url.sh
Run Code Online (Sandbox Code Playgroud)

2) 输入以下文字:

#!/bin/sh

curl -v -k -X PURGE $1
Run Code Online (Sandbox Code Playgroud)

(记得在第一行和最后一行之间留空行)。

3) 保存文件并退出。然后设置适当的属性以从 shell 执行它:

chmod 750 varnish_purge_url.sh
Run Code Online (Sandbox Code Playgroud)

4) 在创建和使用上述脚本时,您想成为 root。如果使用 Ubuntu,请sudo在需要时随意在命令前添加。

5) 使用简单:

./varnish_purge_url.sh URL
Run Code Online (Sandbox Code Playgroud)

URL要清除的 URL在哪里。