在清漆中检测设备并且没有缓存

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 也将解决这个问题。

【讨论】:

以上是关于在清漆中检测设备并且没有缓存的主要内容,如果未能解决你的问题,请参考以下文章

客户登录时,清漆在 HTML 标头中出现 403 禁止错误

wget --mirror 不创建清漆缓存

如何设置清漆缓存控制头

如何清除清漆中的完整缓存?

Django Elastic Beanstalk 清漆缓存

缓存的 Android 蓝牙设备