清漆VCL& Req.Url匹配重定向

时间:2012-05-29 16:43:28

标签: varnish varnish-vcl

我目前Varnish已设置为常规缓存等,但也可用作我们网站移动版的重定向。

效果很好(正如Varnish所做的那样!)并按预期重定向。我决定在VCL配置中添加功能,不仅可以将移动设备重定向到移动版本的网站,还可以将访问移动网站链接的桌面(例如,在Google上)重定向到桌面的桌面版本。< / p>

然而,我似乎无法以最令人费解的方式使用它。这是VCL:

#忽略某些共享资产       if(req.url!〜“。(jpg | png | gif | gz | tgz | bz2 | tbz | mp3 | ogg | css)$”){

     # Let's detect if we're a Mobile
     if (req.http.User-Agent ~ "iP(hone|od)" || req.http.User-Agent ~ "Android" || req.http.User-Agent ~ "Symbian" || req.http.User-Agent ~ "^BlackBerry" || req.http.User-Agent ~ "^SonyEricsson" || req.http.User-Agent ~ "^Nokia" || req.http.User-Agent ~ "^SAMSUNG" || req.http.User-Agent ~ "^LG" || req.http.User-Agent ~ "webOS" || req.http.User-Agent ~ "^PalmSource") {

        # If we're a mobile, set the X-Device header.
        set req.http.X-Device = "mobile";
        # If we've not set a preference to the fullsite to override the redirect, and we're not accessing the mobile site, redirect. This all works fine.
        if ((req.http.Cookie !~ "fullsite")&&(req.url !~ "mobile")){
           error 750 "Moved Temporarily";
        }
     }
     else{
        # We're not mobile. I can see this header is set in the logs.
        set req.http.X-Device = "desktop";
        # If we're a desktop AND accessing the mobile site....
        if (req.url ~ "mobile"){
           # -------------------- THIS NEVER HAPPENS
           error 750 "Moved Temporarily";
        }
     }  
  }

这里的逻辑有一个明显的错误?没有任何cookie或任何其他可能干扰我可以看到的重定向的东西。如果有人对此有任何见解,我会永远感激:) 最好的祝福 乙

1 个答案:

答案 0 :(得分:0)

以为我会再次访问,因为任何人都在阅读同样的问题 - 我们最终解决了这个问题,这是由于一个令人难以置信的基本疏忽。

之前有另一个VCL条件干扰了重定向 - 部分匹配模式(〜)将所有匹配的移动网址重定向到桌面版本,因为这在VCL中已经出现过了。

这是显而易见的一点,但我对任何有此问题的人的建议是检查这些部分匹配,并记住它可能与网址的任何部分匹配。