清漆和Apache的问题(尝试改进OpenCart)

时间:2013-02-26 18:27:27

标签: apache caching varnish

我正在努力为我的网上商店提供一些保证。 Setup varnish port 80,后端是127.0.0.1 apache2。

Apache Benchmark给出了令人满意的结果,比如1-2请求/秒!

在第一个显示的文件上; header.tpl我有:

<?php
  cache_control( "public, s-max-age=6000");
  expires( to_gmt( time() + 6000 ) );
?>

以下是回复标题:

HTTP/1.1 200 OK
Content-Length: 151613
Expires: Tue, 26 Feb 2013 20:04:07
Cache-Control: public, s-max-age=6000
Pragma: no-cache
Set-Cookie: PHPSESSID=i9h5ldj8k4fking69d03jr5244; path=/, language=en; expires=Thu, 28-Mar-2013 18:24:06 GMT; path=/; domain=www.domain.com, currency=CHF; expires=Thu, 28-Mar-2013 18:24:06 GMT; path=/; domain=www.domain.com
Content-Type: text/html; charset=utf-8
Accept-Ranges: bytes
Date: Tue, 26 Feb 2013 18:24:07 GMT
X-Varnish: 186646239
Age: 0
Via: 1.1 varnish
Connection: close
X-Cache: MISS

必须遗漏一些明显的东西,但对我而言,清漆只是不缓存;我究竟做错了什么 ?

2 个答案:

答案 0 :(得分:1)

PHP很可能将session.cache-limiter设置为nocache(默认值)。

这会将Pragma: no-cache(据我所知,将Expire标头设置为当前时间)发送到Varnish,从而禁用缓存。

答案 1 :(得分:0)

默认情况下,Varnish将忽略«Pragma:no-cache»,除非它是处理指令(https://varnish-cache.org/docs/4.0/users-guide/increasing-your-hitrate.html)的指令。

您的缓存控制似乎正在正确配置,应该缓存6000秒。 接下来需要考虑的是cookie。查看标题,您有一个PHP会话Cookie:

Set-Cookie: PHPSESSID=i9h5ldj8k4fking69d03jr5244;

Varnish不会缓存cookie,除非您在vcl文件中删除它。例如:

sub vcl_recv {
  set req.http.Cookie = regsuball(req.http.Cookie, "PHPSESSID =[^;]+(; )?", "");
}