我試圖隱藏每個請求,從光油Apache返回的「服務器」標題。未設置在光油 - 語法錯誤
使用子vcl_fetch:
unset obj.http.Server;
上光油開始我得到:
Expected action, 'if' or '}'
(/etc/varnish/default.vcl Line 43 Pos 9)
unset obj.http.Server;
--------#####-----------------
任何想法?
我試圖隱藏每個請求,從光油Apache返回的「服務器」標題。未設置在光油 - 語法錯誤
使用子vcl_fetch:
unset obj.http.Server;
上光油開始我得到:
Expected action, 'if' or '}'
(/etc/varnish/default.vcl Line 43 Pos 9)
unset obj.http.Server;
--------#####-----------------
任何想法?
最終修復它。
我有一個返回(管道)在vcl_recv,使清漆永遠不會進入vcl_fetch在哪裏我沒有設置標題。
在最近版本(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.2 同樣使用beresp進行了測試,發生同樣的錯誤。
這就像它的未設置有問題。 下面是完整的獲取:
sub vcl_fetch {
unset obj.http.Server;
# force minimum ttl of 6 hours
if (obj.ttl < 6h) {
set obj.ttl = 6h;
}
}
我得到周圍安裝光油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'方法無法訪問..「兩次。
我也嘗試設置自定義標題並將其刪除。那也行不通。
感謝您的澄清 - 我已經更新了我的答案。 – Roadmaster 2010-05-21 16:04:10