2014-04-25 76 views
7

我有一個新的安裝Slackware 64爲14bit,並希望通過Varnish installation documentation我已經安裝並編譯沒有錯誤漆所有依賴(make check通過了所有測試)光油不會承認req.grace變量

然而,當我嘗試使用運行清漆

varnishd -f /etc/varnish/user.vcl -s malloc,4G -T 127.0.0.1:2000 

我得到

Message from VCC-compiler: 
Unknown variable 'req.grace' 
At: ('input' Line 17 Pos 9) 
    set req.grace = 15s; 
--------#########------- 

Running VCC-compiler failed, exit 1 

VCL compilation failed 

我很簡單/etc/varnish/ucer.vcl文件看起來LIK e:

vcl 4.0; 

# set default backend if no server cluster specified 
backend default { 
    .host = "127.0.0.1"; 
    .port = "8080"; 
    .probe = { 
     .url = "/"; 
     .timeout = 34ms; 
     .interval = 1s; 
     .window = 10; 
     .threshold = 8; 
    } 
} 

sub vcl_recv { 
    set req.grace = 15s; 
} 

sub vcl_fetch { 
    set beresp.grace = 30m; 
} 

變量名稱與this example完全相同。

varnishd -V回報

varnishd (varnish-4.0.0 revision 2acedeb) 

通過去除兩個子vcl_recv和子vcl_fetch(只使用默認後端)清漆工作正常,我可以看到它的頭,但我需要編輯VCL文件。

任何想法?

回答

9

您正在使用Varnish 4.0.0,它需要從VCL代碼所基於的3.0格式進行更新。

req.grace消失(您通常不需要它),而vcl_fetch現在稱爲vcl_backend_response。

看到升級文檔:https://www.varnish-cache.org/docs/trunk/whats-new/upgrading.html

+0

謝謝你,我無法相信我錯過了。我幾次閱讀有關從3升級到4的文檔,但沒有注意到vlc_fetch的變化(即使我提供的示例使用這兩個術語,它也不引用寬限期,它屬於4.0文檔)。 –

1

作爲參考,有可能妥善處理恩典功能,下面是什麼在這個blog post說:代碼

(複製/粘貼,瞭解更多詳情指博客)

sub vcl_hit { 
    if (obj.ttl >= 0s) { 
     # normal hit 
     return (deliver); 
    } 
    # We have no fresh fish. Lets look at the stale ones. 
    if (std.healthy(req.backend_hint)) { 
     # Backend is healthy. Limit age to 10s. 
     if (obj.ttl + 10s > 0s) { 
      set req.http.grace = "normal(limited)"; 
      return (deliver); 
     } else { 
      # No candidate for grace. Fetch a fresh object. 
      return(fetch); 
     } 
    } else { 
     # backend is sick - use full grace 
     if (obj.ttl + obj.grace > 0s) { 
      set req.http.grace = "full"; 
      return (deliver); 
     } else { 
      # no graced object. 
      return (fetch); 
     } 
    } 
} 

HTH

+1

給未來讀者的提示:你應該**閱讀完整的文章。 – Redithion