【发布时间】:2023-04-11 03:57:01
【问题描述】:
我是 Varnish Cache 的新手,有一个问题希望能得到一些帮助。
我有一个非常简单和基本的设置,但它没有按我的理解工作 应该是出于某种原因。
这与 Varnish 没有缓存使用 cookie 的 PHP 页面有关。
这是我的设置:
1) 对于我的 default.vcl,我有一个简单的后端
backend default {
.host = "127.0.0.1";
.port = "80";
}
2) 我有一个只有这两行的简单 PHP 文件:
session_start();
echo time();
3) 当我调用此页面时,它不会正确缓存 因为我没有添加所需的vcl规则
4)
所以根据我对我添加的文档的理解 在这两条规则中
sub vcl_recv {
unset req.http.Cookie;
return (lookup);
}
sub vcl_fetch {
unset beresp.http.Set-Cookie;
return(deliver);
}
5)
PHP 页面仍然不会缓存。
我可以看到 Set-Cookie 标头已经
删除,因为我在 FireFox 中使用 FireBug。
只有当我将它添加到 sub vcl_fetch PHP 将缓存:
set beresp.ttl = 24h;
我的问题是这样对吗?
我认为我不需要更改 ttl 的后端响应。我以为只是不安 进出 cookie 会强制 PHP w/ session 缓存。
我完整的默认 vcl 是:
backend default {
.host = "127.0.0.1";
.port = "80";
}
sub vcl_recv {
unset req.http.Cookie;
return (lookup);
}
sub vcl_fetch {
unset beresp.http.Set-Cookie;
set beresp.ttl = 24h;
return(deliver);
}
我的启动命令是:
varnishd -f /etc/varnish/default.vcl -s malloc,128M -T 127.0.0.1:2000 -a 0.0.0.0:8080
我调用的网址是:
http://vbox.local:8080/varnish-tests/index.php
我的 index.php 文件只有:
<?php
session_start();
echo time();
我想问问社区这看起来是否正确 或者如果我错了。基本上我只是不确定为什么我有 添加 beresp.ttl = 24h 以最终获得页面缓存 在清漆中。
我以为我不需要这个。
非常感谢任何建议。
谢谢!
亲切的问候。
【问题讨论】:
-
这符合我的经验——我已经为我希望清漆缓存在我的 VCL 中的所有内容设置了 ttls。如果你不给它一个 ttl,你希望清漆缓存多长时间?
-
嘿弗兰克。你的评论很有道理。我只是不确定,因为我没有注意到文档中关于设置与缓存 cookie 相关的 beresp.ttl 的任何内容。也许我在文档中忽略了这一点。我花了 30 多分钟挠头,直到我“想通”了。再次感谢。
-
缓存处理会话的 PHP 响应时需要注意的事项:PHP 将默认 send anti-caching headers。如果 Varnish 遵循这些标头,那么如果您期望特定的缓存行为(一旦您解决了当前的问题,这完全不相关),您可能会遇到困难。