【问题标题】:How to send a purge request in varnish如何在清漆中发送清除请求
【发布时间】:2012-03-02 04:54:15
【问题描述】:

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

我们正在我们的系统上运行清漆缓存,但想要安装一个系统,以便我们可以在编辑单个页面时清除它们(相当正常)。我们一直在尝试通过使用 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,但同样,它似乎不起作用。我是否在这里遗漏了一些真正基本的东西,或者基础健全,这意味着我的实现存在错误?

非常感谢,

【问题讨论】:

    标签: php varnish


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,PURGE 是一个 HTTP 请求,就像 GET 或 POST 一样——尽管它晚于 RFC 2616,但它被 Squid、Varnish 和 Apache Traffic Server 等内容缓存和代理使用。 “PURGE curl_setopt”的快速谷歌抛出this example。享受:)
    • 或者对于更多的临时或脚本驱动的方法,你也可以使用curl -XPURGE "http://your.varnish.cache/url-to-purge"
    【解决方案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 是要清除的 URL。

    【讨论】:

      【解决方案3】:

      您也可以使用命令行进行清除。使用命令sudo varnishadm。这将打开清漆命令行界面。您可以在其中键入命令以根据需要清除页面。例如,要清除您的主页,请执行以下操作:

      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  
      

      【讨论】:

      • 不,您不能从 varnishadm 中清除 - 只能像您的示例中那样禁止。即使最终结果相似,禁止和清除也不是相同的功能。
      【解决方案4】:

      也许我使用的是更新版本,但上面的内容对我不起作用。这样做了:

      sub vcl_hit {
        if (req.request == "PURGE") {
          ban("req.url ~ "+req.url);
          error 200 "Purged.";
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2020-07-26
        • 2017-10-20
        • 2015-10-10
        • 2011-12-26
        • 2012-02-19
        • 2012-08-19
        • 1970-01-01
        • 2023-02-22
        • 2016-12-17
        相关资源
        最近更新 更多