2013年6月25日星期二

Varnish –为你的网站加速

Web cache对于一个高流量的网站来说是非常重要的,通过cache常见的静态文件,如图片, flash, css和js等不常改动的文件,可以大量减轻后台server的压力。
说到这可能很多人都会想到开源软件Squid,Squid如今广泛的被各大网站所使用,如sina、sohu等,但与此同时,我们还有另外一个选择,那就是Varnish,下面是一些官方网站的介绍:
“Varnish is a state-of-the-art, high-performance HTTP accelerator. Varnish is targeted primarily at the FreeBSD 6/7 and Linux 2.6 platforms, and takes full advantage of the virtual memory system and advanced I/O features offered by these operating systems.”
我一些朋友已经在他们的production环境下采用Varnish来替换Squid,据说性能很不错。
所以这里我打算临时给自己的网站也搭建一个web cache,当然我这只是做测试而已,以我网站目前的流量还远远不到需要cache的地步:)
首先先大概介绍一下web cache的工作原理:
varnish_workflow
现在让我们来开始安装Varnish,Varnish最新稳定版是1.1.2,可以从这里下载
当前我的web server运行的是FreeBSD,Apache,PHP和MySQL,Varnish讲会被安装在另外单独一台RedHat server上。
安装
1. 为Varnish创建用户和组’www’
# groupadd www
# useradd www -g www
2. 编译安装Varnish
# cd varnish-1.1.2
# ./configure –prefix=/home/varnish
# make && make install
3. 创建cache文件和日志文件目录
# mkdir -p /data02/cachefile
# chown -R www.www /data02/cachefile
# mkdir -p /data02/cachelog
# chown -R www.www /data02/cachelog
4. Varnish的配置文件
例子:
backend mywebserver {
set backend.host = “YOUR_WEB_SERVER_IP”;
set backend.port = “80″;
}
acl purge {
“localhost”;
“127.0.0.1″;
“192.168.1.0″/24;
}
sub vcl_recv {
if (req.request == “PURGE”) {
if (!client.ip ~ purge) {
error 405 “Not allowed.”;
}
lookup;
}
if (req.http.host ~ “^www.isoracle.com”) {
set req.backend = mywebserver;
if (req.request != “GET” && req.request != “HEAD”) {
pipe;
}
elseif(req.url ~ “\.(php|cgi|pl)($|\?)”) {
pass;
}
else {
lookup;
}
}
else {
error 404 “isoracle.com Cache Server”;
lookup;
}
}
sub vcl_hit {
if (req.request == “PURGE”) {
set obj.ttl = 0s;
error 200 “Purged.”;
}
}
sub vcl_miss {
if (req.request == “PURGE”) {
error 404 “Not in cache.”;
}
}
sub vcl_fetch {
if (req.request == “GET” && req.url ~ “\.(txt|js)$”) {
set obj.ttl = 3600s;
}
else {
set obj.ttl = 10d;
}
}
更多关于配置文件的说明请参考官方文档的说明。
5. 启动varnishd
# /home/varnish/sbin/varnishd -n /data02/cachefile -f /home/varnish/vcl.conf -a 0.0.0.0:80 -s file,/data02/cachefile/cache.dat,500M -g www -u www -w 50,200,10 -T 127.0.0.1:1800 -p client_http11=on
更多Varnish启动选项,可以参考命令”varnishd –help”
6. 启动varnishncsa
# /home/varnish/bin/varnishncsa -n /data02/cachefile -w /data02/cachelog/varnish.log &
7. 检查Varnish状态
# /home/varnish/bin/varnishstat
此命令将会显示当前Varnish工作状态的很多参数,比如cache hints, cache misses等。
检验Varnish所搭建的web cache是否生效
这里我们用curl来获取http header来检查。
# curl –head http://www.isoracle.com/
HTTP/1.1 200 OK
Server: isoracle/Stable 1 (Unix) PHP/5.2.0
Last-Modified: Sat, 12 Jul 2008 21:54:39 GMT
ETag: “96347-cc05-4879281f”
Content-Type: text/html
Content-Length: 52229
Date: Sun, 13 Jul 2008 01:36:12 GMT
X-Varnish: 1652882410 1652882077
Age: 8877
Via: 1.1 varnish
Connection: keep-alive
从http header的信息来看,Varnish已经在工作了。
最后你只要修改一下你的DNS的A记录,将原先指向web server的IP指向Varnish所在server的IP就可以了。

没有评论:

发表评论