了解清漆:它可以在网站上caching10,000个静态页面吗?

首先,我使用:APC,W3TC,PHP5,Wordpress 3.8,Apache 2.2,我得到了很多“caching未命中”

还是不太明白光油那么好。 下面是我从Unixy后台运行几分钟后得到的一些统计数据:

client_conn:3744 client_drop:0 client_req:3910 cache_hit:914 cache_miss:2347

我改变了我的清内存到3GB的RAM(总共8)。

Varnish只caching经常出现的页面是否正常? 那么假设你有一个拥有10,000页的网站,Varnish能够将所有这些内容保存在caching中,还是只caching一定数量的频繁请求的页面?

所以我的问题实际上是我可以如何改进Varnish来caching更多的页面,并将它们保存在caching中很长一段时间(大部分是不需要刷新的静态页面)

3GB应该够了,认真。 如果你真的达到了极限,你将不会有caching丢失,但是caching丢失,在你的情况下:0。

所以内存可能不是问题。

清漆内存使用非常简单,使用的内存不多,大部分内存用于存储对象,对象是关于您的网页,因此一个50kb的caching在清漆中的HTML页面将使用大约50kb的清漆。

然而,如果你的对象和它的关联对象哈希值是不同的,例如因为有不同的查询参数(不影响联系人,但是用来跟踪例如),因此每个对象将被分别caching。

下面是默认的vcl来计算对象的散列值:

sub vcl_hash { hash_data(req.url); if (req.http.host) { hash_data(req.http.host); } else { hash_data(server.ip); } return (hash); } 

正如你所看到的,它是基于完整的url和主机。 它存在一个querystring-vmod来sorting和/或删除查询参数来增加命中计数。

这可能是一个很好的开始,检查你的对象是不是被视为不同的清漆(在大多数情况下,这是因为查询参数)。

但在你的情况,我真的怀疑你有cookies,和/或错误的caching控制头。

默认情况下,清漆将忽略所有的cookie请求,增加您的caching未命中数。

 sub vcl_recv { // ... if (req.http.Authorization || req.http.Cookie) { /* Not cacheable by default */ return (pass); } } 

如果你真的知道你在做什么,你可能会删除请求中的cookies并强制caching你的对象,但要小心,你可以caching一个pipe理页面,这将被传递给客人。

举个例子,你可以定义哪个url应该被caching,并设置一个Cache-Control: public header,在你的vcl中,检测一个公共的Cache-Control头,删除cookie和caching。

但是,再次小心。


编辑 :您可能会对这篇文章感兴趣: 清漆和Wordpress上的清漆文档

在Unixy Varnishconfiguration之上,我在研究了各种configuration之后添加了这个configuration,也许有些configuration是多余的,但是现在我的cachingHIT比例好了很多,现在达到了60%,并且我把CPU负载从3降低到了0.10 – 0.50

wordpress后端

 if (!(req.url ~ "wp-(login|admin)")) { unset req.http.cookie; } 

其他文件

  if ( req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?[a-z0-9]+)?$" ) { unset req.http.cookie; } 

cookies

 if (req.http.Cookie) { set req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *__utm.=[^;]+;? *", "\1"); if (req.http.Cookie == "") { remove req.http.Cookie; } } 

清洗

 if (req.request == "PURGE") { return (lookup); } 

另外3GB是有点矫枉过正,我可能会改回1或2GB ..即使有10,000页或更多,但我会让它运行24小时,看看