首页 > 解决方案 > 清漆基于用户代理的自定义 html

问题描述

我想基于$_SERVER['HTTP_USER_AGENT']. 如何使用清漆设置来实现这一点,以使其具有特定用户代理的特定缓存。

我知道我可以用 JS 实现类似的东西,但这对我来说不可靠,我想在服务器端做。

我将在我的 html 中用于检测用户代理的 php 如下所示;

<?php if($_SERVER['HTTP_USER_AGENT'] == $target):?>
    <style>
      //CSS
    </style>    
    <?php endif;?>

我怎样才能设置清漆,使它与这个巧妙地工作?

标签: varnish

解决方案


您需要做的就是修改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");
  }
}

推荐阅读