2010-05-19 36 views
2

我試圖隱藏每個請求,從光油Apache返回的「服務器」標題。未設置在光油 - 語法錯誤

使用子vcl_fetch:

unset obj.http.Server; 

上光油開始我得到:

Expected action, 'if' or '}' 
(/etc/varnish/default.vcl Line 43 Pos 9) 
    unset obj.http.Server; 
--------#####----------------- 

任何想法?

回答

1

最終修復它。

我有一個返回(管道)在vcl_recv,使清漆永遠不會進入vcl_fetch在哪裏我沒有設置標題。

2

在最近版本(2.1系列)的響應對象被稱爲beresp,和這樣的事情在vcl_fetch 確實工作(我只是測試它在光油2.1.0):

unset beresp.http.Server; 

我安裝了你使用的版本(1.1.2)和你提到的完全相同的行爲;它會出現unset關鍵字不起作用,至少不在vcl_fetch函數中。這很奇怪,因爲我發現至少有一個例子使用未設置的exact purpose

如果可能的話,我建議升級到最新的Varnish,因爲我認爲如果你觀察到的未設置行爲是一個錯誤,團隊將會願意修復它。

除非,你可能會想嘗試設置服務器到別的東西:

set obj.http.Server = ""; 
set obj.http.Server = "BogoServer Whatever"; 

假設你的目標是隱藏服務器簽名。如果你想要完全消除頭部,我敢說,你的版本的Varnish是無法完成的。

1

我正在使用清漆1.1.2 同樣使用beresp進行了測試,發生同樣的錯誤。

這就像它的未設置有問題。 下面是完整的獲取:

sub vcl_fetch { 
    unset obj.http.Server; 
    # force minimum ttl of 6 hours 
    if (obj.ttl < 6h) { 
      set obj.ttl = 6h; 
    } 
} 
+0

感謝您的澄清 - 我已經更新了我的答案。 – Roadmaster 2010-05-21 16:04:10

1

我得到周圍安裝光油2.1.2這是最新的版本是最新的。 我不再收到任何語法錯誤,但不會應用所需的效果。這個彈性頭仍然存在。

sub vcl_fetch { 
    unset beresp.http.Server; 
    set beresp.http.Server = "Apache"; 
} 

我使用Firebug在頭偷看,這是我看到:

Server Apache/2.2.9 (Debian) 

我試着像剛纔你重置,而不是設置一些變化,沒有什麼工作。

它可能是一個邏輯問題?也許未設置需要放在不同的sub。我嘗試將它放在vcl_miss和vcl_deliver中。 「變量」beresp.http.Server'方法無法訪問..「兩次。

我也嘗試設置自定義標題並將其刪除。那也行不通。