使用Varnish缓存加速网站

Varnish是一个高效的开源HTTP加速器,可以以内存级别来缓存页面,达到加速网站的效果。经过我之前的测试,同样是Wordpress,在启用Varnish缓存前,页面平均完成载入时间要2-3s,其中服务端解析渲染页面就消耗500ms以上,使用Varnish后,服务端页面输入几乎是10ms级别,页面载入时间基本能够控制在1s以内,效果还是非常明显的。同时,由于被varnish缓存的页面不再调用后端程序,因此针对小规模的CC攻击,varnish也能够起到很好的防御作用,对于网站提升TPS,降低RT的效果非常明显。

下面简单介绍下如何使用Varnish。

首先你需要搭建Web环境,lnmp、lamp等等都可以,这里我就不详细介绍了,推荐大家可以使用Linux下的LNMP一键安装包,非常好用,地址:www.lnmp.org

第二步,安装Varnish-cache,这里可以通过RPM包安装的方式或者源码编译安装。当然RPM包安装的varnish版本不一定是最新的(CentOS下安装的版本就是3.0.2而非最新的3.0.3)。这里我简单介绍下CentOS下通过RPM包如何安装,更多的安装方式可以参考官网: https://www.varnish-cache.org/releases/varnish-cache-3.0.3

rpm --nosignature -i http://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm
yum install varnish

执行上述命令后,不到一分钟varnish就安装完成了,接下来是配置。

首先需要配置Varnish的访问端口,Varnish默认的访问端口不是80端口,因此需要修改/etc/sysconfig/varnish配置文件,这里面有两个值需要关注:

1
2
VARNISH_LISTEN_PORT=80 定义varnish的端口为80
VARNISH_STORAGE_SIZE=1G 定义varnish最大缓存大小为1G

然后需要配置Varnish的缓存规则,这里建议直接下载我的配置文件:点击下载,覆盖/etc/varnish/default.vcl文件,然后进行修改,这里面需要修改如下内容:

1
2
3
4
5
6
7
#配置网站的地址和端口,这里的端口是你的nginx或者apache的端口,注意使用Varnish的话,需要把nginx或者apache的默认端口修改为非80端口。  
backend default { .host = "127.0.0.1"; .port = "8080"; }
#配置允许缓存的域名,这里把localhost替换为你的网站域名,只允许这个域名被缓存
# Only cache the following site
if (req.http.host ~ "(localhost)") { set req.backend = default; } else { return (pass); }
#配置缓存时间,设置缓存页面过期时间为1h,单位可以是s(秒),h(小时),d(天)等。 [.........]
set beresp.ttl = 1h; [.........]

上述设置完成后,使用service varnish start命令启动varnish,然后访问网站,如果可以访问,就代表设置成功了。

最后,需要在Wordpress里面安装Wordpress Varnish插件,这样你发布或者修改文章的时候,就会自动purge varnish的缓存,不必手动更新啦。

更多varnish详细配置说明可以参考varnish官网: https://www.varnish-cache.org/docs/3.0/