2012-02-09 91 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