已启用 Varnish 缓存,但标头中仍显示 age: 0

已启用 Varnish 缓存,但标头中仍显示 age: 0

我在服务器上安装了 varnish 和 apache。这是一个 SSL 站点。因此,我使用 apache 和 varnish 进行 SSL 终止。问题是,当我使用 curl -I 命令时,标头显示 age 总是大于 0。当我使用以下代码测试我的站点时,情况也一样https://isvarnishworking.uk但是,当我从浏览器查看标题时,它总是显示年龄为 0。我尝试了所有方法。我甚至尝试过一个仅使用 http 的网站。在 Web 浏览器中,年龄仍然显示为 0

我使用的指南:https://bash-prompt.net/guides/apache-varnish/

这些是标题

接受范围:字节
访问控制允许来源:*
年龄:0
内容编码:gzip
内容长度:7128
内容类型:text/html;字符集=UTF-8
日期:2019 年 8 月 15 日星期四 05:37:53 GMT
最后修改时间:2019 年 8 月 15 日星期四 04:25:12 GMT
服务器:Apache/2.4.29(Ubuntu)
状态:200
变化:X-Forwarded-Proto、Accept-Encoding
通过:1.1 清漆(Varnish/5.2)
x-清漆:65690

编辑:这是我使用 curl -v 127.0.0.1:8080 时获得的标题

重建 URL 为:127.0.0.1:8080/
  尝试 127.0.0.1...
TCP_NODELAY 设置
连接到 127.0.0.1 (127.0.0.1) 端口 8080 (#0)
获取/HTTP/1.1
主机:127.0.0.1:8080
用户代理:curl/7.58.0
接受: */*
HTTP/1.1 200 正常
日期:2019 年 8 月 15 日星期四 09:58:23 GMT
服务器:Apache/2.4.29(Ubuntu)
链接:;rel="https://api.w.org/", https://arcadesite.io/>; rel=shortlink
变化:接受编码
访问控制允许来源:*
内容类型:text/html;字符集=UTF-8
X-清漆:491654 524537
年龄:62岁
通过:1.1 清漆(Varnish/5.2)
接受范围:字节
内容长度:28467
连接:保持连接

答案1

为什么您在浏览器中无法获得相同的结果,而curl原因大多总是一个——cookies。

Varnish 会为你做一些预防措施,并在存在 cookie 的情况下绕过缓存(无论是在由后端设置或当你通过浏览器发送)。

就您而言,很可能是您的浏览器发送了一个Cookie:请求(可以在 Chrome devtools 的“网络”选项卡中轻松验证)。

为了让 Varnish 发挥作用,典型的解决方案是将其配置为在没有必要的 cookie 存在时删除所有 cookie,例如vcl_recv

if (req.http.cookie !~ "your-app-cookie-name") {
    unset req.http.cookie;
}

这将仅在发送 cookie 时才传递 cookie your-app-cookie-name。对于其他情况(例如,用户未登录,JavaScript 跟踪脚本可能需要 cookie,因此对于 Varnish 或后端的正常工作来说都不是必需的)。

如果您的应用程序为每个页面发送“必需”的 cookie(经常引用),您将需要调整您的应用程序(最佳路线,例如PHPSESSID仅在登录页面发送 cookie)和/或调整 Varnish 配置以在特定页面上忽略它以增加缓存命中率。

相关内容