同一站点的不同Varnish缓存存储

时间:2014-02-13 11:46:18

标签: caching cookies nginx varnish

我有一个使用Joomfish进行翻译的多语言joomla网站。由于Joomfish使用cookie来改变语言,而不是一个不同的URL,我遇到了重大问题。然而,我找到了一种方法来通过获取清漆来检查cookie值,如果英语服务缓存,如果还有其他任何传递给服务器。

多数民众赞成,但我希望能够缓存其他版本。有没有办法为不同的语言提供不同的缓存。所以是德语,法语等的缓存版本。

我尝试过使用不同的nginx配置文件并设置不同的清漆后端,但这似乎没有用。

为此我做了:

/* default is english */
backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

/* french backend */
backend french {
    .host = "127.0.0.1";
    .port = "8081";
}

然后在我的sub recv函数中:

if(req.http.cookie ~ "jfcookie\[lang\]=fr"){
    set req.backend = french;
}

但它似乎服务于相同的缓存后端。因此,如果您使用法语,它会将您发送给英语内容。

2 个答案:

答案 0 :(得分:1)

我相信你可以通过发送一个不同的标题来处理这个问题,你可以让你的应用设置一个标题,例如X-language并发送一个标题Vary: X-language,这样清漆会理解有两种不同的语言并分别缓存每个。

答案 1 :(得分:0)

我现在有这个工作。对于处于相同情况的任何人,请查看散列。我在下面详述了我的解决方案。

sub vcl_recv {
    if(req.http.cookie ~ "jfcookie\[lang\]=fr"){
        set req.http.X-Cookie-Language = "fr";
    }
}

sub vcl_hash {
    hash_data(req.http.X-Cookie-Language);
}