add_header Vary 'User-Agent'; # CDN 缓存键配置 device 分组 curl -s -A 'iPhone' -I https://www.example.com/ | head -3
手机上打开站点头图还是桌面版的尺寸,字号也不对,缩略图挤成一团,同一个地址在电脑上看又完全正常。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:缓存键里面只有 URL 一个维度,站点按 UA 输出不同的模板,边缘节点存下第一份之后,所有设备都拿到同一份页面,等于白做了适配。
「缓存键缺设备维度」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
处理上按这个顺序:缓存键里面加入设备类型这个维度,分开存两份;或者在响应头里输出 Vary 与 User-Agent,让缓存按这两个值分开存储;先确认 CDN 到底支不支持按 UA 分桶,不支持就换个方案。
确认没问题再收工,同一个地址在手机和桌面各拿到对应的模板,互相不会覆盖。
