【发布时间】:2012-02-14 07:05:24
【问题描述】:
我有一个使用 Symfony2 反向代理进行缓存的网站(带有 ESI)。平均响应时间约为 100 毫秒。我尝试在服务器上安装 Varnish 进行尝试。我一步一步跟着guide from Symfony cookbook,删除了cache文件夹中的所有内容,但是我尝试的时候还是创建了http_cache文件夹。所以我想我可以尝试从app.php 中注释掉$kernel = new AppCache($kernel);。那工作得很好。 http_cache 不再由 varnishstat 创建,Varnish 似乎在工作:
12951 0.00 0.08 cache_hitpass - Cache hits for pass
1153 0.00 0.01 cache_miss - Cache misses
大约有 14000 个请求,所以我认为一切都会好起来的。但在回应之后,我发现响应提高到了大约 2 秒。
Apache 在端口 9000 上运行,Varnish 在 8080 上运行。所以我使用 echoping -n 10 -h http://servername/ X.X.X.X:8080 进行回应。
我不知道可能出了什么问题。使用 Varnish 和 Symfony2 是否需要任何其他设置?还是我只是做错了什么?
根据要求,这是我的default.vcl,到目前为止我已经进行了修改。
我发现 Varnish 的默认配置有 2 个问题:
- 它不会缓存带有 cookie 的请求(我的应用程序中的每个人都分配了会话)
- 它会忽略
Cache-Control: no-cache标头
所以我在我的配置中添加了这些情况的条件,它现在执行得相当好(从使用 S2 反向代理的 ~160 提高了 ~175 req/s - 但老实说,我期待更多)。我只是不知道如何检查它是否一切正常,所以欢迎任何输入。
大多数页面的缓存因 cookie 而异,s-maxage 1200。常见的 ESI 包含不因 cookie 而异,s-maxage 非常低(文章、文章列表)。用户个人资料页面根本没有被缓存(no-cache),我不确定 ESI 是否包含在这些页面上,甚至被 Varnish 缓存了。只有由 cookie 改变的 ESI 是带有用户特定信息的标题(在 100% 的页面上)。
这篇文章中的所有内容都是针对 Varnish 3.X 的(我个人使用的是 3.0.2)。
另外,经过几周的研究,我真的不知道我在做什么了,所以如果你在配置中发现一些奇怪的东西,请告诉我。
【问题讨论】:
-
5 美分,基于我最近的经验。这完全取决于 Vasnish 配置,尤其是您是否有足够的可用内存。请出示您的
sub vcl_recv、sub vcl_fetch和backend? -
用配置更新了原始帖子。我想到的另一件事是用户cookies(可能还有跟踪cookies)。我们页面上的每个请求都有它们。但我不明白为什么 varnishstat 说它会缓存 90% 的请求。当我们使用 Symfony2 反向代理时,我们从来没有遇到过问题。
-
我的设置中有类似的
vcl_recv,虽然我也有这些行:set req.http.X-Forwarded-Port = "80"; set req.http.X-Forwarded-Proto = "http";