varnish - 清漆基于用户代理的自定义 html
问题描述
我想基于$_SERVER['HTTP_USER_AGENT']
. 如何使用清漆设置来实现这一点,以使其具有特定用户代理的特定缓存。
我知道我可以用 JS 实现类似的东西,但这对我来说不可靠,我想在服务器端做。
我将在我的 html 中用于检测用户代理的 php 如下所示;
<?php if($_SERVER['HTTP_USER_AGENT'] == $target):?>
<style>
//CSS
</style>
<?php endif;?>
我怎样才能设置清漆,使它与这个巧妙地工作?
解决方案
您需要做的就是修改vcl_hash
方法以向缓存键添加更多信息。
https://varnish-cache.org/docs/trunk/users-guide/vcl-hashing.html
sub vcl_hash {
hash_data(req.http.User-Agent);
}
请注意,用户代理字符串没有遵循真正的标准,因此即使对于相同的浏览器,差异也很大。除非您自己控制用户代理(内部系统等),否则我希望这种技术有 99% 的缓存未命中
如果您想为移动设备使用不同的缓存,以下可能会更成功,因为它会尝试检测移动浏览器,然后使用标准化缓存键值来提高命中率:
sub vcl_hash {
if (req.http.User-Agent ~ "mobile") {
// hash_data
hash_data("mobile");
}
}
推荐阅读
- c++ - 如何在 C++ 实现文件中实例化一个类?
- vue.js - 在 Vue.js 应用程序中收听使用 Twilio 添加的消息
- javascript - How to properly run methods after subscription data come?
- html - 如何在 Facebook 应用程序中的评论文本区域中设置发送按钮的样式?
- javascript - redux 函数 'connect(mapStateToProps)(ConnectedList)' 的名称(类型)是什么
- react-native - 有没有办法/库将文件存储在 React Native 中应用程序的 iCloud 容器中?
- python - 将 Pytorch CUDA 张量快速写入 GPU 上的内存映射文件
- python - How to generate a number of codes with print but without being the same codee?
- vue.js - Vue. js CORS issues, backend data blocked by CORS policy
- facebook-graph-api - 如何在 Facebook Graph API 中获取我的页面后跟的组列表