2012-08-22 33 views
2

我有幾個後端設置,每個在VCL中檢測到,然後正確的設置應用。這適用於一些網站,但有一些網站指向同一網站。多個虛擬主機通過清漆,不正確的後端如果服務

我已閱讀並應用此功能,但適用於某些功能,但不適用於其他功能。

Configure multiple sites with Varnish

例如我已經一些後端定義:

backend site4 { 
    .host = "127.0.0.1"; 
    .port = "81"; 
} 

backend site3 { 
    .host = "127.0.0.1"; 
    .port = "81"; 
} 

backend site2 { 
    .host = "127.0.0.1"; 
    .port = "81"; 
} 

backend site1 { 
    .host = "127.0.0.1"; 
    .port = "81"; 
} 

然後在vcl_recv我設置主機和正確的後端:

if (req.http.host ~ "(?i)^(www.)?site1.co.uk") 
{ 
    set req.http.host = "www.site1.co.uk"; 
    set req.backend = site1; 
} 
elsif (req.http.host ~ "(?i)^(www.)?site2.co.uk") 
{ 
    set req.http.host = "www.site2.co.uk"; 
    set req.backend = site2; 
} 
elsif (req.http.host ~ "(?i)^(www.)?site3.com") 
{ 
    set req.http.host = "www.site3.com"; 
    set req.backend = site3; 
} 
elsif (req.http.host ~ "(?i)^(www.)?site4.net") 
{ 
    set req.http.host = "www.site4.net"; 
    set req.backend = site4; 
} 

www.site1.co.uk作品,就像www.site2.co.uk,但www.site3.com和www.site4.net都顯示www.site2.co.uk的內容 - 這就像忽略了我的後端和j使用同一個網站的某些網站。

主機設置正確,因爲如果我這樣做:

curl -I http://site3.com 

使用vcl_fetch

set beresp.http.X-Host = req.http.host; 

以下的時候,我可以看到主機被正確設定爲www.site3.com

任何想法的人?

請注意,是否有更簡短的方法來定義我的後端?

回答

0

對於那些沒有工作,我沒有添加新的Apache端口的虛擬主機條目

<VirtualHost *:80> 

它需要的是

<VirtualHost *:80 *:81> 

若要在網站新的Apache端口

2

順便說一句,如果你有相同的後端服務器上的網站,那麼你不nee d定義每個後端的新後端。

+0

好點!謝謝 –

1

編輯:我的第一個答案是錯的。我誤解了這個問題。

我建議你,是調試和理解爲什麼它取決於後端的不同:

  • 禁用所有緩存return pass;vcl_recv後您的if語句
  • 運行varnishlog當您運行的要求

它應該幫助