ios - 在 Varnish 中检测设备并且没有缓存

标签 ios wordpress caching user-agent varnish

我有一个 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/

相关文章:

PHP 通过短代码始终位于页面顶部

css - wordpress 页面中的 Google map 样式问题

php - 将大量 WordPress 插件数据作为数组插入到 wp-option 表中是正确的方法吗?

CSS-从缓存加载图像

ios - 如何根据 SWIFT 中的内容调整 TextView 的高度?

ios - 应用程序切换期间 UITableView 分隔符闪烁

ios - UICollectionView 更新单个单元格

ios - iOS 中的 AWS v2 SNS - createPlatformEndpoint :request

asp.net - HTTP缓存: Cache-Control

c# - 具有多个订阅者和实时更新的实时数据缓存