2

我设置了几个后端,在 VCL 中检测到每个后端,然后应用正确的设置。这适用于某些站点,但有些站点会指向同一个站点。

我已经阅读并应用了它,它适用于某些人,但不适用于其他人。

使用 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 的内容 - 就像它忽略了我的后端并且只对某些站点使用相同的站点。

主机设置正确,因为如果我这样做:

curl -I http://site3.com

在使用以下内容时vcl_fetch

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

我可以看到主机正确设置为 www.site3.com

有什么想法吗?

旁注,是否有更短的方法来定义我的后端?

4

3 回答 3

2

顺便说一句,如果您在同一后端服务器上有站点,那么您不需要为每个站点定义新的后端。

于 2012-08-22T19:08:44.437 回答
1

编辑:我的第一个答案是错误的。我误解了这个问题。

我建议您调试并理解为什么它因后端而异:

  • return pass;vcl_recvif 语句之后禁用所有缓存
  • 运行请求时运行varnishlog

它应该有帮助

于 2012-08-29T11:38:58.407 回答
0

对于没有工作的站点,我没有将新的 Apache 端口添加到 VirtualHost 条目

我有

<VirtualHost *:80>

它需要是

<VirtualHost *:80 *:81>

在新的 Apache 端口上工作

于 2012-08-22T08:07:05.680 回答