使用Varnish替代Squid的体验
之前曾在Windows上使用了Squid作为图片服务器的缓存,效果还不错。
前几天看到张宴同学的一篇文章《使用Varnish代替Squid做网站缓存加速器的详细解决方案》,就决定试试Linux+Varnish。
-------------------------------------------
一:安装Varnish(Linux系统)
基本安装过程,包括目录结构的安排就是依葫芦画瓢的学张宴同学。
1. 创建 www 组和账户 , 缓存文件目录( /var/vcache ) ,日志目录( /var/logs ) :
/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/vcachemkdir -p /var/logschmod +w /var/logs
chown -R www:www /var/logs
系统有可能会提醒你,权限编号 48 被占用,改成 49 一样可以使用。也可以直接 vi /etc/passwd 修改。
2.下载Varnish 编译安装:(下载地址也是张宴同学的)
wget http://blog.s135.com/soft/linux/varnish/varnish-1.1.2.tar.gz
tar zxvf varnish-1.1.2.tar.gz
cd varnish-1.1.2
./configure --prefix=/usr/local/varnish
make && make install
将Varnish安装到 /usr/local/varnish 目录中。
3.创建Varnish配置文件(/usr/local/varnish/vcl.conf):
vi /usr/local/varnish/vcl.conf
backend image1server {
set backend.host = "222.73.×××.1";
set backend.port = "80";
}
backend image2sserver {
set backend.host = "222.73.×××.2";
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 ~ "^image1.×××.com") {
set req.backend = image1server;
if (req.request != "GET" && req.request != "HEAD") {
pipe;
}
</span>else {
lookup;
}
}
elseif (req.http.host ~ "^image2.×××.com") {
set req.backend = image2server;
if (req.request != "GET" && req.request != "HEAD") {
pipe;
}
else {
lookup;
}
}
else {
error 404 "Picture 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 ~ "\.(html|asp)$") {
set obj.ttl = 300s;
}
else {
set obj.ttl = 7d;
}
}
(1)我是假设有2个域名指向本机器 image1.***.com 和 image2.***.com 。
(2)除了 image1.***.com 和 image2.***.com 其他的域名访问这台机器,都会返回404 Picture Cache Server。
(3).html 和 .asp 文件缓存时间为 300秒,其余的为 7 天。
5.启动Varnish:
ulimit -SHn 51200
/usr/local/varnish/sbin/varnishd -n /var/vcache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -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
6.记录Varnish日志:
/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/varnish.log &
设置开机启动,和切割日志文件,请看张宴同学的原文-=》 《使用Varnish代替Squid做网站缓存加速器的详细解决方案》
二:管理Varnish
1.查看Varnish状态
/usr/local/varnish/bin/varnishstat -n /var/vcache/
2.查看访问最多的引用页面
/usr/local/varnish/bin/varnishtop -n /var/vcache/ -i rxheader -I Referer
3.查看本机器上被访问最多的元素
/usr/local/varnish/bin/varnishtop -n /var/vcache/ -i rxurl
刚刚学习,欢迎大家一起讨论讨论。