Varnish 设置 req.http.host squirreliness

Varnish 设置 req.http.host squirreliness

我有一个网站 www.whatsthatbug.com,通过 varnish/nginx/php-fpm 提供服务。我正在使用 wptouch pro 插件运行 wordpress。此插件为移动用户提供网站的移动版本。

这是我在 Varnish 中执行的操作。如果您从移动浏览器直接访问 m.whatsthatbug.com,并且使用 www.whatsthatbug.com 域名访问除首页之外的任何页面,它似乎工作正常。但是,如果您从移动浏览器访问首页(仅 www.whatsthatbug.com),您将看到该网站的常规版本。我在这里做错了什么吗?有什么建议吗?

sub vcl_recv {
    if (req.http.host ~ "m.whatsthatbug.com") {
      set req.http.user-agent = "iphone";
    }

    if ( req.http.user-agent ~
      "(.*iphone.*|.*ipod.*|.*incognito.*|.*webmate.*|.*android.*|.*dream.*|.*cupcake.*|.*froyo.*|.*blackberry9500.*|.*blackberry9520.*|.*blackberry9530.*|.*blackberry9550.*|.*blackberry 9800.*|.*blackberry 9780.*|.*iemobile/7.0.*|.*webos.*|.*s8000.*|.*bada.*|.*googlebot-mobile.*)" )
    {
      set req.http.host = "m.whatsthatbug.com";
    }

    if (req.request == "PURGE") {
            if (!client.ip ~ purge) {
                    error 405 "Not allowed.";
            }
            return(lookup);
    }
    if (req.url ~ "^/$") {
           unset req.http.cookie;
    }
}

答案1

如果你使用的是 Varnish 2.1 或更新版本(你应该使用),问题可能是你的 VCL 中的正则表达式区分大小写。以下是Varnish 2.1 常见问题解答

正则表达式是否区分大小写?我可以更改它吗?

在 2.1 及更新版本中,正则表达式默认区分大小写。在早期版本中,它们不区分大小写。

要在 2.1 中将其更改为单个正则表达式,请在开始时使用 (?i)。

请参阅 PCRE 手册页以了解更多信息。

我可以说您使用的 VCL 与 iPhone 不匹配,例如 - 它可以像这样标识自己;

Mozilla/5.0 (iPhone; U; CPU 类似 Mac OS X; en) AppleWebKit/420+ (KHTML,类似 Gecko) Version/3.0 Mobile/1A543a Safari/419.3

相关内容