Caching 从varnish服务多个站点

Caching 从varnish服务多个站点,caching,reverse-proxy,varnish,varnish-vcl,Caching,Reverse Proxy,Varnish,Varnish Vcl,我有几个网站,我想缓存使用相同的清漆实例 我确实使用了如下方式设置后端: if (req.http.host == "time.ikub.al") { # Process through time backend set req.backend_hint = timeserver; } if (req.http.host == "m.time.ikub.al") { # Process through time mobile backend set req.ba

我有几个网站,我想缓存使用相同的清漆实例

我确实使用了如下方式设置后端:

if (req.http.host == "time.ikub.al") {
    # Process through time backend
    set req.backend_hint = timeserver;
}

if (req.http.host == "m.time.ikub.al") {
    # Process through time mobile backend
    set req.backend_hint = timemobileserver;
}
哈希方法如下所示:

sub vcl_hash {
    # Called after vcl_recv to create a hash value for the request. This is used as a key
    # to look up the object in Varnish.
    hash_data(req.url);
    if (req.http.host) {
       hash_data(req.http.host);
    } else {
       hash_data(server.ip);
    }
    # hash cookies for requests that have them
    if (req.http.Cookie) {
        hash_data(req.http.Cookie);
    }
}
然而,我注意到,手机版的页面在桌面上运行,反之亦然。这发生在具有相同名称的页面上,例如“Default.aspx”

据我所知,上面的代码散列应该包括主机部分,而这不应该发生。我是否遗漏了什么,或者是否有关于如何处理多个站点的建议

Thanx,
Albert

我认为您部分复制了默认vcl,但忘记了返回(查找),因此在执行代码后,varnish将执行默认代码,这可能会导致varnish行为不当


您是否将varnish实例隐藏在任何其他反向代理、负载平衡器、https卸载程序等背后

任何前端层都可能会损坏主机头,因此此代码既不会执行第一个条件,也不会执行第二个条件:

# unset req.http.host or set req.http.host = "my.varnish.backend";

if (req.http.host == "time.ikub.al") {
    # Process through time backend
    set req.backend_hint = timeserver;
}

if (req.http.host == "m.time.ikub.al") {
    # Process through time mobile backend
    set req.backend_hint = timemobileserver;
}
因此,req.backend\u提示生效,varnish可以不确定地选择后端。 至少默认后端在我多次重启和重新加载后是不同的


试着检查一下这个路径,也许会有帮助。

我的印象是“重定向”没有被缓存…但是,似乎重定向被缓存,发生的事情是,桌面版本的重定向响应被缓存,下一个客户端被服务于缓存页面,因此它将他重定向到移动版本…我将重定向逻辑移动到客户端,在您提供的链接中,事情似乎正常运行“调用return(lookup)时要小心,因为这会中止默认VCL的执行,Varnish最终可能会基于或多或少的随机输入返回数据。”似乎我不应该调用“return(lookup)”,对吧?这取决于具体情况,我经常编写整个VCL_哈希(包括需要的默认代码)并调用
return(lookup)
以确定我的method@Albert我想你应该在vcl_散列中记录req.http_主机,也许问题就在这里我记录了req.http.host,一切看起来都很好…仍然找不到逻辑答案。我的印象是“重定向”“没有被缓存…但是,重定向似乎被缓存了,发生的事情是,桌面版本的重定向响应被缓存,下一个客户端被服务于缓存页面,因此它将他重定向到移动版本…我将重定向逻辑移到客户端,事情似乎正常