【问题标题】:Different Varnish cache stores for same site同一站点的不同 Varnish 缓存存储
【发布时间】:2014-03-12 06:38:29
【问题描述】:

我有一个使用 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;
}

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

【问题讨论】:

    标签: caching cookies nginx varnish


    【解决方案1】:

    我相信您可以通过发送不同的标头来简单地处理这个问题,您可以让您的应用设置一个标头,例如 X-language 并发送一个标头 Vary: X-language 这样 varnish 会理解有两种不同的语言并分别缓存.

    【讨论】:

    • 谢谢,这是一个可靠的解决方案吗?我读过可能有两种方式,你的方式和这里描述的散列方式:stackoverflow.com/questions/19058660/…这解释了 Drupal,我的是 Joomla 我假设消毒位对我来说会有所不同。
    • 两者都是采用不同方法的有效解决方案,但你是对的,Joomla 和 Drupal 的 cookie 是不同的......所以你应该选择调整你的应用程序以生成自定义标题或去纯 Varnish解决方案。
    【解决方案2】:

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

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多