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

2022-08-30 18:21:26

我看不到类似的问题,但如果我是骗人的,请道歉。

我们正在我们的系统上运行一个清漆缓存,但希望安装一个系统,我们可以在编辑时清除单个页面(相当正常)。我们一直在尝试通过使用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");

但这似乎没有做任何事情(清漆日志似乎没有显示任何清除)。

我也尝试过cURL,但同样,它似乎不起作用。我在这里是否遗漏了一些非常基本的东西,或者基础是否合理,这意味着我的实现被错误了?

非常感谢,


答案 1

你需要去发出一个HTTP请求。

未经测试,但应该沿着(如果你想使用你提到的curl):

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

答案 2

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

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 在哪里。URL


推荐