php - 在 Varnish 缓存页面中包含 req.http.referer

标签 php ubuntu varnish

我有一个网站只有少数几个来源的流量高峰。该站点还需要能够通过猜测用户是否刚刚使用 PHP $_SERVER["HTTP_REFERER"] 到达站点来向用户显示内容。

是否可以在 Varnish 缓存中包含 req.http.referer 的值,以便这种行为更多地基于个人用户?我相信某些用户正在显示错误的内容,因为另一个用户缓存了具有不同引荐来源值的内容。

最佳答案

如果您希望缓存在所有可能的引用上都不同,那么 http 协议(protocol) Vary-header 是您的解决方案。如果您的流量与来自极少数唯一 URL 的引荐来源不太一致,那实际上会杀死您的缓存命中率。

我认为更好的解决方案是从php层去除猜测谁是新用户的逻辑并将其添加到varnish中。这可以通过在 vcl_recv 中为请求设置一个自定义 header 来完成,然后使用该 header 在 vcl_hash 中通过添加类似这样的内容到 vcl_recv

if ((req.http.referer ~ "www.newuserhost1.com" || req.http.referer ~ "www.newuserhost2.com") &&
    req.url == "/") {
       req.http.X-New-User = 1;
}

并将其添加到 vcl_hash
 hash_data(req.http.X-New-User);

当用户到达您的后端时,您可以从那里检查 X-New-User 的值而不是referer。

关于php - 在 Varnish 缓存页面中包含 req.http.referer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13713981/

相关文章:

php - 有没有办法在extbase查询中使用mysql函数?

apache - Varnish 探针总是返回生病的后端

wordpress - 如何使用多个站点将非 www 重定向到 www? (Nginx 和 Varnish )

php - 无法用php保存数据

javascript - 来自 JavaScript 的 Yii 值

c - 如何在ubuntu中为c语言安装lprotobuf-c

php - 在 Ubuntu 12.04 上启用 XSL

ubuntu - 如何使用 iptables 保护 docker 容器

php - 为什么这个 SQL 查询会杀死我的服务器?

PHP 可执行文件将在命令行中运行,但不能在浏览器中运行