2014-06-15 53 views
0

我正在爲有很多(1000+)名爲虛擬主機(在Apache上)的服務器實施Varnish(4.0),其中大多數虛擬主機指向相同的IP和Web。我得到光油正常工作:使用varnish與多個Apache命名虛擬主機

backend default { 
    .host = "127.0.0.1"; 
    .port = "80"; 
} 
sub vcl_recv { 
if (req.http.host ~ "^www.domain1.de(:[0-9]+)?$") { 
    set req.http.host = "www.domain1.de"; 
} else if (req.http.host ~ "^www.domain2.de(:[0-9]+)?$") { 
    set req.http.host = "www.domain2.de"; 
} 
.... 
.... 
set req.backend_hint = default; 
} 

但是,爲1000+域做這件事似乎有點奇怪。我不需要任何特殊的網站配置,它們都具有相同的後端。

如果我不添加任何特定的配置,我只能訪問標準網站(不管我輸入什麼域名)。

任何提示如何解決? 謝謝!

+0

什麼是你想達到什麼你告訴我們的例子嗎? –

+0

如前所述,它可以達到這樣的正確域名。但我需要重複這1000多次... – Chris

+0

我的意思是要問,爲什麼再次設置'主機',如果請求主機已經包含正確的主機名?無需再次明確設置。 –

回答

1

如果你想例如刪除端口名稱,或需要做一些普遍更改req.http.host您可以在漆VCL使用regsub()方法:

set req.http.host = regsub(req.http.host , "(.*)(:[0-9]+|)" , "\1"); 

此示例刪除的端口號如果存在。
請根據您的需求設置正則表達式,因爲您的問題並未真正說明您要實現的目標。

請注意,您可以通過\N調用替換字符串作爲$1一些man頁面提示。 (A臭蟲已經被提起來解決這個問題。)

而對於最後一個漂亮的正則表達式光油備忘單:
http://kly.no/varnish/regex.txt

+0

感謝您的正則表達提示!似乎我對端口有一個後端問題(我先用不同的端口測試過),那就是解決方案,而且對於標準端口,我不再需要任何特殊的配置。 – Chris