如何使用 Varnish、PHP 和 Cookies 缓存网站

如何使用 Varnish、PHP 和 Cookies 缓存网站

我考虑开始在我的网站上使用 Varnish。我刚刚尝试了 Varnish,我想知道如何缓存页面,即使我的网站使用 cookie,用于 Google Analytics。我试图删除它们,但 Varnish 似乎没有缓存。这是我的配置的样子;http://pastie.org/1254664。如果有关系的话,我有一台 Debian 服务器和一台使用 Ubuntu Server 的服务器。那么,即使我使用 cookie,我该如何缓存网站?

先感谢您!

补充:我也没有得到任何 X-Cache:HIT/MISS。我做错了什么?

答案1

我对使用 Varnish 进行缓存还很陌生,但以下是我目前学到的内容:使用 Varnish 针对应用程序进行缓存时需要考虑几个因素。

在你的情况下,要知道设置了哪些 cookie 以及目的是什么。如果 varnish 在你的请求中看到 cookie,你将被传递到后端,从而导致缓存未命中。

Google Analytics Cookie

如果您正在使用 Google Analytics cookies,您可以安全地在 Varnish 中取消设置它们;不用担心,您仍会保留 GA 报告中的数据。在您的vcl_recv

set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[a-z]+|__utma_a2a)=[^;]*", "");

您还可以尝试更多清理行,也可以在vcl_recv

从 Cookies 中删除“;”前缀

set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", "");

取消设置空的 cookies

if (req.http.Cookie ~ "^\s*$") {
  unset req.http.Cookie;
}

特定于应用程序的 Cookie

如果您的应用程序在用户登录执行某项功能时设置了 cookie,则这些请求应该不是缓存并直接发送到后端。否则,您可能会缓存已登录用户查看的页面(不好)。

使用如下方法:

if (req.http.Authorization || req.http.Cookie) {
  return (pass);
}

祝你好运。

编辑

使用它来查看清漆所看到的 cookie:

varnishtop -i RxHeader -I Cookie

如果你的正则表达式遗漏了任何一个,请在这里捕获它们!

答案2

我不知道 Varnish 怎么样。但根据我管理服务器的经验,先在局域网中尝试这些东西,然后再转移到互联网上。

答案3

这就是 http 中 Vary-header 的用途:应返回相同资源的变体。Varnish 可以理解Vary: cookies

如果您没有收到 X-Cache 标头,您可能根本没有连接到缓存;您确定它在正确的 IP/端口上运行吗?

答案4

跑步varnishlog看看你是否真的在用清漆

相关内容