gpt4 book ai didi

php - 使用 session_start() 时 Varnish Cache 不缓存 PHP 页面

转载 作者:行者123 更新时间:2023-12-03 17:44:49 28 4
gpt4 key购买 nike

我第一次使用 Varnish Cache并且没有任何快乐让它像我想要的那样工作。

我的问题看起来很简单。

我只希望缓存 .php 页面。

到目前为止,每个 .php 请求总是通过 Varnish 缓存并访问我的 Apache Web 服务器。

问题出在 cookie 和对 session_start() 的调用上;

没有 session_start() = 缓存使用 session_start() = 无缓存

现在文档已经足够简单易懂了但我试过并没有成功。尽快当我添加对 session_start() 的调用时 = 不再缓存。

这是带有 PHP 的示例 HTML:

<?php 
session_start();
?>

<html>
<head>
</head>
<body>

<?php echo date('Y-m-d H-i-s'); ?>

</body>
</html>

这是我非常干净简单的 varnish default.vcl

backend default {
.host = "127.0.0.1";
.port = "8080";
}

sub vcl_recv {
unset req.http.Cookie;
return (lookup);
}

sub vcl_fetch {
if (beresp.http.Set-Cookie) {
unset beresp.http.Set-Cookie;
return (deliver);
}
}

这应该从客户端和服务器取消设置 Cookie它似乎确实这样做了。使用 FireBug 调试时在 FireFox 中,我可以看到 Set-Cookie 和 Cookie HTTP header 当我使用这个 default.vcl 时不存在

这是来自 FireFox 的 HTTP header :

响应头:

HTTP/1.1 200 OK
Server: Apache/2.2.16 (Debian)
X-Powered-By: PHP/5.3.3-7
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html
Content-Length: 192
Date: Wed, 23 Feb 2011 01:34:17 GMT
X-Varnish: 2052563421
Age: 0
Via: 1.1 varnish
Connection: keep-alive

Request Headers:

GET /test.php HTTP/1.1
Host: xshare.com.local
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cache-Control: max-age=0

我就是看不出哪里错了。我修补了 2 个小时,添加/更改和删除.vcl 配置文件的行和变体。

有人可以提供任何建议吗?

非常感谢。

最佳答案

您现在可能已经发现,缓存和 cookie 并不匹配。在上面的示例中,您要删除 session cookie(以及所有其他 cookie),因此以这种方式使用 Varnish 时您的 session 将不可用。

您可以做两件事:- 允许 cookie 但不为登录用户获取缓存- 除非确实需要,否则不要使用 session (或 cookie)

第三种更复杂的解决方案是去除大多数页面的 cookie,但允许某些页面使用它们,然后您将这些页面作为 ESI block 处理。有很多关于此的文档。

关于php - 使用 session_start() 时 Varnish Cache 不缓存 PHP 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5086142/

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