2012-09-13 59 views
4

我有非常複雜的清漆配置。我無法真正使用導演並手動完成路線。如何檢查後端在vcl_recv中是否健康

//webservice1 and webservice2 has probes working there 

set req.backend = webservice1; 
if (req.backend.healthy) 
{ 
    #redirect there 
} 

set req.backend = webservice2; 
if(req.backend.healthy) 
{ 
    #change parameters with regex and redirect 
} 

This works。但看起來真的很蹩腳。

是否有任何「合法」的方法來確定後端是否健康?像這樣:

if(webservice2.healthy) 
{ 
    #change parameters with regex and redirect 
} 

這顯然不起作用。

回答

1

我一直在做很多的研究,這是實現它的唯一方法(除非你想寫一個vmod)。

假設你總是希望與webservice1迴應,除非是生病了,我可能會建議一個小的重構:

set req.backend = webservice1; 
if(!req.backend.healthy) { 
    set req.backend = webservice2; 
    #change parameters with regex 
} 
# redirect here 
+1

如果你不知道/有建議,你應該把它寫的評論不是答案。 –

+0

感謝您的建議,但由於我的信譽低下,我無法發表評論。 另外,這個問題沒有答案嗎? :) – Redithion

+0

我有同樣的問題,這不是在光油4 – skonsoft

1

很多與谷歌搜索後,我發現這link,他們在那裏談論遷移V4。

代碼:

if(!req.backend.healthy) { 
    #your logic 
} 

有效期爲3光油而不是清漆4

清漆4:

看看這裏: https://www.varnish-cache.org/docs/4.0/users-guide/vcl-grace.html#users-guide-handling-misbehaving-servers

所以解決方案將是:

import std; 
set req.backend_hint = webservice1; 
if (!std.healthy(req.backend_hint)) { 
    set req.backend_hint = webservice2; 
} 

我希望這可以幫助您:)

+1

他沒有要求使用Varnish 4解決方案,但同時擁有兩種版本。 – Redithion

+0

有趣的是,3年後,我從清漆3升級到4,並遇到同樣的問題。我搜索了一下並且遇到了你的答案。目前很好。我決定加入它,一旦我登錄,我發現我正在看我的老問題。 –