/ 中存储网

CentOS 5.5系统安装配置varnish服务器

2014-04-17 17:11:01 来源:IT技术网
一,什么是varnish

Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。

Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有

两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括了CPU内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此

Squid Cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给

操作系统处理,这就是 Varnish cache设计架构。

Varnish的理念是好的,但是Varnish还没有稳定到可以完全替代Squid的程度,现在就抛弃Squid选择Varnish是不明智的。

二,安装varnish

1、创建www用户和组,以及Varnish缓存文件存放目录(/var/vcache):

/usr/sbin/groupadd www -g 48

/usr/sbin/useradd -u 48 -g www www

mkdir -p /var/vcache

chmod +w /var/vcache

chown -R www:www /var/vcache

2、创建Varnish日志目录(/var/logs/):

mkdir -p /var/logs

chmod +w /var/logs

chown -R www:www /var/logs

3、编译安装varnish:

官方下载地址:

wget http://www.varnish-software.com/sites/default/files/varnish-2.1.4.tar.gz

标准安装:

yum -y install automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig

cd varnish-2.1.4

./configure --prefix=/usr/local/varnish

make && make install

4、创建Varnish配置文件:

 vim /usr/local/varnish/etc/varnish/default.vcl

输入以下内容:

backend webserver {

   .host = "127.0.0.1";

   .port = "80";

}

sub vcl_recv {

  if (req.http.x-forwarded-for) {

set req.http.X-Forwarded-For =

req.http.X-Forwarded-For ", " client.ip;

  } else {

set req.http.X-Forwarded-For = client.ip;

}

 if (req.request != "GET" &&

req.request != "HEAD" &&

req.request != "PUT" &&

req.request != "POST" &&

req.request != "TRACE" &&

req.request != "OPTIONS" &&

req.request != "DELETE") {

return (pipe);

}

 if (req.request != "GET" && req.request != "HEAD") {

return (pass);

}

if (req.http.host ~ "^(.*).sns.test") {

set req.backend = webserver;

}

 if (req.url ~ ".(jsp|php|do)($|?)") {

   return (pass);

} else {

  return (lookup);

}

}

 sub vcl_pipe {

  return (pipe);

}

sub vcl_pass {

  return (pass);

}

sub vcl_hash {

  set req.hash += req.url;

  if (req.http.host) {

set req.hash += req.http.host;

  } else {

set req.hash += server.ip;

  }

  return (hash);

}

sub vcl_hit {

  if (!obj.cacheable) {

return (pass);

  }

  return (deliver);

}

sub vcl_miss {

  return (fetch);

}

sub vcl_fetch {

 if (!beresp.cacheable) {

   return (pass);

 }

  if (beresp.http.Set-Cookie) {

   return (pass);

 }

 if (req.request == "GET" && req.url ~ ".(png|png|gif|jpg|css|js|html|htm)$") {

   set beresp.ttl = 3600s;

 }

 return (deliver);

}

 sub vcl_deliver {

  if (obj.hits >  {

set resp.http.X-Cache = "HIT from www.sns.test";

  } else {

set resp.http.X-Cache = "MISS from www.sns.test";

  }

  return (deliver);

}

通过netstat -tlnp查看nginx监控80端口。Varnish通过反向代理请求后端IP为127.0.0.1,端口为80的nginx服务器;

5、启动varnish:

/usr/local/varnish/sbin/varnishd -n /var/vcache -f

/usr/local/varnish/etc/varnish/default.vcl

-a 0.0.0.0:8090 -s file,/var/vcache/varnish_cache.data,1G -g www -u www -w 30000,51200,10

-T 127.0.0.1:3500 -p client_http11=on

解释一下8090是varnish监听的端口,例如http://www.sns.test:8090会反向请求127.0.0.1:80服务器,而gif,js等格式的文件会存在varnish缓存服务器中。查看这几种格式文件是否多个X-Cache报头。如果保存成功会显示:HIT from www.sns.test。127.0.0.1:3500这个是管理缓存的ip。此处的www.sns.test是自己配置的虚拟主机。

参数说明:

-n 缓存写入路径

-f 指定配置文件启动

-a 监听本机的网卡的80端口

-T 指定本机的varnish管理端口

-s file 指定varnish缓存文件的位置以及大小

-w 指处理的最小请求数、最大请求数、超时时间

-g 组名

-u 用户名

-p client_http11=on 支持http1.1协议

-P 指定其进程码文件的位置

6、启动varnishncsa用来将Varnish访问日志写入日志文件:

/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/varnish.log &

# 通过 Varnish 管理端口進行管理

/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 help

# 清除具体URL地址

 /usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge /a/

/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge w*$

# 清除所有缓存

 /usr/local/varnish-2.1/bin/varnishadm -T 127.0.0.1:3500 url.purge *$

# 通过varnishstat监控varnish状态

/usr/local/varnish/bin/varnishstat –n var/vcache