我有一个使用Symfony2反向代理进行缓存的网站(带有ESI)。平均响应时间约为100毫秒。我尝试在服务器上安装Varnish进行尝试。我一步一步地遵循了guide from Symfony cookbook,删除了cache文件夹中的所有内容,但是在尝试时仍然创建了http_cache文件夹。所以我想我可以尝试从$kernel = new AppCache($kernel);注释掉app.php。效果很好。不再创建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个请求中,所以我认为一切都会好起来的。但是在 echo 之后,我发现响应提高到了约2秒。

Apache在9000端口上运行,在8080上运行Varnish。因此,我使用echoping -n 10 -h http://servername/ X.X.X.X:8080回显。

我不知道有什么问题。将Varnish与Symfony2结合使用是否需要其他设置?还是我只是做错了什么?

根据请求,这是我到目前为止所做的修改的 default.vcl

我发现Varnish的默认配置有2个问题:
  • 它不缓存带有cookie的请求(并且我的应用程序中的每个人都分配了 session )
  • 它忽略Cache-Control: no-cache header

  • 因此,我将这些情况的条件添加到了配置中,并且它的性能现在相当好(使用S2反向代理时从〜160达到约175 req/s,但老实说,我期望更多)。我只是不知道如何检查所有设置是否正确,因此欢迎任何输入。

    大多数页面的缓存因cookie而异,但s-maxage为1200。常见的ESI包含内容因cookie而异,但s-maxage相当低(文章,文章列表)。用户个人资料页面根本不会被缓存(no-cache),而且我真的不确定Varnish是否会缓存其中包含的ESI。只有因Cookie而异的ESI才是带有用户特定信息的 header (在100%的页面上)。

    这篇文章中的所有内容都是针对Varnish 3.X的(我个人使用的是3.0.2)。

    另外,经过数周的研究,我真的不知道自己在做什么,因此,如果您发现配置有些奇怪,请告诉我。

    最佳答案

    我很惊讶这在10个月内还没有得到真正完整的答案。这可能是一个非常有用的页面。

    您指出自己:

  • Varnish不使用cookie缓存请求
  • Varnish会忽略Cache-Control:无缓存头

  • 第一件事是,您应用中的每个人都需要一个 session 吗?如果没有,请不要启动 session ,或者至少延迟启动 session ,直到真正必要时(即他们登录或以其他方式登录)。

    如果您仍可以在用户登录时缓存页面,则需要非常小心,不要为用户提供一个供他人使用的页面。但是,如果要执行此操作,请编辑vcl_recv()以剥离要缓存的页面的 session cookie。

    您可以轻松地让Varnish处理vcl_fetch()中的no-cache指令,实际上您已经完成了。

    我发现的另一个问题是,默认情况下,Symfony将max-age设置为0,这意味着它们永远不会被vcl_fetch中的默认逻辑缓存

    我还注意到您在Varnish中将端口设置为:
    backend default {
        .host = "127.0.0.1";
        .port = "80";
    }
    

    您自己说过Apache正在9000端口上运行,因此这似乎不匹配。通常,您可以将Varnish设置为在默认端口(80)上监听,而将Varnish设置为在端口9000或其他端口上查找后端。

    关于php - 如何为 Symfony2 站点正确设置 Varnish?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8929160/

    10-12 21:59