我正在努力为我的网上商店提供一些保证。 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
必须遗漏一些明显的东西,但对我而言,清漆只是不缓存;我究竟做错了什么 ?
答案 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 =[^;]+(; )?", "");
}