我有一个类似于Heroku & Rails - Varnish HTTP Cache Not Working的问题,但解决方案(等待一段时间,然后一切正常)似乎并不适用 - 我已经进行了几天的设置。
Heroku Google group 上的这个帖子有一些用户有同样的问题。他们提到缓存所有内容都需要一段时间,但我的理解是,过了一段时间,所有内容都应该被缓存,不是吗?还是仅在流量很大的情况下才适用?
我需要一些关于我应该在哪里寻找/我可以尝试改变什么以使缓存正常工作的建议。
我的设置:
我在 Heroku(Rails 3.0.3、Ruby 1.9.2、bamboo-mri-1.9.2)上运行http://www.swingoutlondon.co.uk,主索引页面执行大量数据库查询以返回什么本质上是一个静态页面——通常需要大约 2-3 秒(是的,这是我确实需要解决的问题,但我认为清漆缓存是一个快速的胜利)。
我已经按照此处Cache-Control
所述设置了响应标头,并且确实似乎已在页面上设置了该标头:
>> curl -I http://swingoutlondon.co.uk
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 13 May 2012 00:01:05 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Cache-Control: public, max-age=300
Etag: "2565201f3ae39c6a9a1f6b1fb8bbbe0a"
X-Ua-Compatible: IE=Edge,chrome=1
X-Runtime: 1.699667
Content-Length: 44224
Accept-Ranges: bytes
X-Varnish: 681634826
Age: 0
Via: 1.1 varnish
笔记:Cache-Control: public, max-age=300
我假设这Age: 0
表明它没有检索到缓存副本,并且确实该命令在正常的慢 2-3 秒内返回。
如果继续反复尝试该 curl,我偶尔可以缓存副本(页面在半秒内加载并且Age
大于 0)。
我必须承认我没有完全理解 HTTP 标头,但一个线索可能是:当Age
大于 0 时,我得到两个数字X-Varnish
(在所有其他情况下,我只得到一组):
X-Varnish: 848670407 848650521
这是我检查过的内容:
- 每次的来源都是相同的。
- 我
before_filter
在那个页面上有一个,它将页面上次更新的时间设置为实例变量。 - 有许多 cookie - 据我所知,它们都是由 Google Analytics 或 Twitter 或 Facebook 按钮设置的。
为了更好地衡量,这是我的请求标头:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Cookie:__utma=264326157.189257391.1336869624.1336869624.1336869624.1; __utmb=264326157.2.10.1336869624; __utmc=264326157; __utmz=264326157.1336869624.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
Host:www.swingoutlondon.co.uk
If-None-Match:"2565201f3ae39c6a9a1f6b1fb8bbbe0a"
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.168 Safari/535.19