2012-02-09 55 views
17

我看不到类似的问题,但是如果我正在复制,则表示歉意。如何在清漆中发送清除请求

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

非常感谢,

回答

30

你需要去做一个HTTP请求。

未经检验的,而应该是沿着线(如果你想使用卷曲你提到):

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

是的,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/)。享受:) – TerryE 2012-02-09 18:17:19

+1

非常感谢你们俩!多谢! :) – flukeflume 2012-02-10 09:45:04

+1

或者对于更多特设或脚本驱动的方法,您也可以使用'curl -XPURGE“http://your.varnish.cache/url-to-purge”' – 2015-06-10 19:21:45

3

您也可以使用命令行清除。使用命令sudo varnishadm。这将打开清漆命令行界面。您可以在其中输入命令以根据需要清除页面。 E.g清除您的主页上,这样做:

[email protected]:/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 
+1

不,您无法从varnishadm中清除 - 只在你的例子中禁止。即使最终结果相似,禁止和清除功能也不尽相同。 – Clarence 2015-02-06 11:33:57

-1

也许我是一个较新的版本,但什么是上面没有为我工作。该做的:

sub vcl_hit { 
    if (req.request == "PURGE") { 
    ban("req.url ~ "+req.url); 
    error 200 "Purged."; 
    } 
} 
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。

+0

这里有什么帮助吗? :) http://stackoverflow.com/questions/35632607/is-the-http-verb-purge-idempotent – 2016-02-25 16:45:27