清漆设置req.http.hostp鼠标松鼠

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

这是我如何在清漆中做的。 如果您从移动浏览器直接访问m.whatsthatbug.com,并且使用www.whatsthatbug.com域访问除首页以外的任何页面,似乎可以正常工作。 但是,如果您从移动浏览器转到首页(只需www.whatsthatbug.com),则可以使用该网站的常规版本。 我在这里做了明显错误的事吗? 有什么build议么?

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

如果你使用的是Varnish 2.1或更新的版本(你应该这样做),问题可能是你的VCL中的正则expression式是区分大小写的。 来自Varnish 2.1 FAQ的一个片段

正则expression式是否区分大小写? 我可以改变它吗?

在2.1和更新版本中,正则expression式默认情况下是区分大小写的。 在较早的版本中,它们不区分大小写。

要在2.1中对一个正则expression式进行更改,请在开始时使用(?i)。

有关更多信息,请参阅PCRE手册页。

我可以告诉你使用的VCL与iPhone不匹配,例如 – 可以像这样识别自己;

Mozilla / 5.0(iPhone; U;像Mac OS X的CPU; Apple)AppleWebKit / 420 +(KHTML,如Gecko)Version / 3.0 Mobile / 1A543a Safari / 419.3