基于用户代理的 Varnish 自定义 html
Varnish custom html based on User Agent
我想根据 $_SERVER['HTTP_USER_AGENT']
向用户显示不同的 html 样式。我怎样才能通过清漆设置实现这一点,使其具有针对特定用户代理的特定缓存。
我知道我可以用 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");
}
}
Varnish 默认支持。您不需要更改 Varnish 的配置。您只需要发送 Vary header:
The Vary HTTP response header determines how to match future request headers to decide whether a cached response can be used rather than requesting a fresh one from the origin server.
在您希望它根据 User-Agent 变化的特定情况下,Varnish 会理解它需要在缓存中为每个不同的 [=19] 创建相同 object 的不同版本=].
请注意,由于 User-Agent header 具有的变化数量,使用不同的缓存可能会大大减少 hit-rate。为避免这种情况,需要规范化。您可以在 Varnish's documentation
中阅读更多规范化 User-Agent headers
我想根据 $_SERVER['HTTP_USER_AGENT']
向用户显示不同的 html 样式。我怎样才能通过清漆设置实现这一点,使其具有针对特定用户代理的特定缓存。
我知道我可以用 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");
}
}
Varnish 默认支持。您不需要更改 Varnish 的配置。您只需要发送 Vary header:
The Vary HTTP response header determines how to match future request headers to decide whether a cached response can be used rather than requesting a fresh one from the origin server.
在您希望它根据 User-Agent 变化的特定情况下,Varnish 会理解它需要在缓存中为每个不同的 [=19] 创建相同 object 的不同版本=].
请注意,由于 User-Agent header 具有的变化数量,使用不同的缓存可能会大大减少 hit-rate。为避免这种情况,需要规范化。您可以在 Varnish's documentation
中阅读更多规范化 User-Agent headers