在清漆中检测设备并且没有缓存
Posted
技术标签:
【中文标题】在清漆中检测设备并且没有缓存【英文标题】:Detect device in varnish and no cache 【发布时间】:2016-02-24 10:25:26 【问题描述】:我有一个 ipad 应用程序,它显示了我的一些 wordpress 帖子。该网站启用了清漆。我为应用程序页面发送了一个自定义 http.User-Agent,这样一些桌面内容就不会像标题一样显示在应用程序中和页脚,因为我的应用程序两者都有。 所以发生的情况是,当用户通过桌面访问时,它被缓存在清漆中,当另一个用户使用应用程序检查同一页面时,他正在获取桌面版本。 我在我的默认 vcl 中尝试了以下内容。
### do not cache these files:
##never cache the admin pages, or the server-status page
if (req.url ~ "wp-(admin|login)" || req.http.Content-Type ~ "multipart/form-data" || req.http.User-Agent ~ "IPAD_APP" )
set req.backend_hint = master;
return(pass);
IPAD_APP 是我的自定义代理 这没有帮助。请问天气是否正确,或者是否有其他方法可以为桌面和应用程序版本显示不同的内容。
【问题讨论】:
【参考方案1】:您遇到的直接问题是桌面版本被缓存了,所以这就是移动用户所看到的。您可以更新 vcl_hash 函数以考虑它是台式机还是 iPad(或可能具有的任意数量的不同设备类型)。
一个选项:
sub vcl_recv
set req.http.X-DeviceType = "desktop";
if (req.http.User-Agent ~ "IPAD_APP")
set req.http.X-DeviceType = "ipad_app";
sub vcl_hash
hash_data(req.http.X-DeviceType);
这最终成为从原始 Wordpress 发送“Vary: User-Agent”的简单版本。我概述的方法的问题是,为了执行 PURGE,您需要确保依次通过每个 User-Agent。如果您在缓存上发送低 TTL,那么这将不是问题。 BAN 也将解决这个问题。
【讨论】:
以上是关于在清漆中检测设备并且没有缓存的主要内容,如果未能解决你的问题,请参考以下文章