gpt4 book ai didi

php - Varnish 缓存不缓存 PHP 与 session 除非后端 TTL 改变

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:01:47 25 4
gpt4 key购买 nike

我是 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。

仅当我将其添加到子 vcl_fetch 时PHP 将缓存:

set beresp.ttl = 24h;

我的问题是这是否正确?

我不认为我需要改变 ttl后端响应。我以为只是令人不安cookies in 和 out 会强制 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 以最终拥有页面缓存在 Varnish 中。

我以为我不需要这个。

非常感谢任何建议。

谢谢!

亲切的问候。

最佳答案

Varnish 将遵守响应中的缓存 header 。默认情况下,PHP 将发送缓存控制 header 不缓存响应

Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma:no-cache

您需要禁用这些 header ,否则 Varnish 将服从并因此不会缓存页面。要关闭它们,只需使用空字符串调用 session_cache_limiter()

session_cache_limiter('');
header("Cache-Control: public, s-maxage=60");
session_start();

然后您可以添加 header 以将缓存控制设置为公共(public)。使用上面的三行将启用缓存。

关于php - Varnish 缓存不缓存 PHP 与 session 除非后端 TTL 改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5467028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com