我有一个 ipad 应用程序,它显示了我的一些 wordpress 帖子。该网站启用了 Varnish 。我为应用程序页面发送了一个自定义 http.User-Agent,以便一些桌面内容不会显示在应用程序中,例如页眉和页脚,因为我的应用程序两者都有。
所以发生的情况是,当用户通过桌面访问时,它被缓存在 Varnish 中,当另一个用户使用应用程序检查同一页面时,他正在获取桌面版本。
我在我的默认 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 是我的定制代理
这没有帮助。我可以知道天气是否正确,或者是否有任何其他方法可以为桌面和应用程序版本显示不同的内容。
最佳答案
您遇到的直接问题是桌面版本被缓存,所以这就是移动用户将看到的。您可以更新 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 也将解决这个问题。
关于ios - 在 Varnish 中检测设备并且没有缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35599424/