文档章节

使用Varnish代替Squid做网站缓存加速器的详细解决方案

mac_zhao
 mac_zhao
发布于 2015/06/23 14:34
字数 1391
阅读 28
收藏 0

今天写的这篇关于Varnish的文章,已经是一篇可以完全替代Squid做网站缓存加速器的详细解决方案了。网上关于Varnish的资料很少,中文资料更是微乎其微,希望本文能够吸引更多的人研究、使用Varnish。

在我看来,使用Varnish代替Squid的理由有三点:
  1、Varnish采用了“Visual Page Cache”技术,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存、磁盘中交换文件,性能要比Squid高。
  2、Varnish的稳定性还不错,我管理的一台图片服务器运行Varnish已经有一个月,没有发生过故障,而进行相同工作的Squid服务器就倒过几次。
  3、通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存,这一点是Squid不能具备的。

  使用Varnish代替Squid做网站缓存加速器的详细解决方案

下面来安装Varnish网站缓存加速器(Linux系统):
  1、创建www用户和组,以及Varnish缓存文件存放目录(/var/vcache):

1
2
3
4
5
/usr/sbin/groupaddwww -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/):

1
2
3
mkdir-p/var/logs
chmod+w/var/logs
chown-R www:www/var/logs

3、编译安装varnish:

1
2
3
4
5
wget http://blog.s135.com/soft/linux/varnish/varnish-1.1.2.tar.gz
tarzxvf varnish-1.1.2.tar.gz
cdvarnish-1.1.2
./configure--prefix=/usr/local/varnish
make&&makeinstall

4、创建Varnish配置文件

1
vi/usr/local/varnish/vcl.conf

输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
backend myblogserver {
       set backend.host = "192.168.0.5";
       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 ~ "^blog.s135.com") {
               set req.backend = myblogserver;
               if (req.request != "GET" && req.request != "HEAD") {
                       pipe;
               }
               else {
                       lookup;
               }
       }
       else {
               error 404 "Zhang Yan 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 = 30d;
       }
}

这里,我对这段配置文件解释一下:
  (1)、Varnish通过反向代理请求后端IP为192.168.0.5,端口为80的web服务器;
  (2)、Varnish允许localhost、127.0.0.1、192.168.0.***三个来源IP通过PURGE方法清除缓存;
  (3)、Varnish对域名为www.newasp.net的请求进行处理,非www.newasp.net域名的请求则返回“Zhang Yan Cache Server”;
  (4)、Varnish对HTTP协议中的GET、HEAD请求进行缓存,对POST请求透过,让其直接访问后端Web服务器。之所以这样配置,是因为POST请求一般是发送数据给服务器的,需要服务器接收、处理,所以不缓存;
  (5)、Varnish对以.txt和.js结尾的URL缓存时间设置1小时,对其他的URL缓存时间设置为30天。

  5、启动Varnish

1
2
ulimit-SHn 51200
/usr/local/varnish/sbin/varnishd-n/var/vcache-f/usr/local/varnish/vcl.conf -a 0.0.0.0:80 -sfile,/var/vcache/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500

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

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

7、配置开机自动启动Varnish

1
vi/etc/rc.local

在末尾增加以下内容:

1
2
3
ulimit-SHn 51200
/usr/local/varnish/sbin/varnishd-n/var/vcache-f/usr/local/varnish/vcl.conf -a 0.0.0.0:80 -sfile,/var/vcache/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on
/usr/local/varnish/bin/varnishncsa-n/var/vcache-w/var/logs/youvideo.log &

8、优化Linux内核参数

1
vi/etc/sysctl.conf

在末尾增加以下内容:

1
2
3
4
5
6
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000    65000

再看看如何管理Varnish:  1、查看Varnish服务器连接数与命中率:

1
/usr/local/varnish/bin/varnishstat

使用Varnish代替Squid做网站缓存加速器的详细解决方案

  2、通过Varnish管理端口进行管理:
  用help看看可以使用哪些Varnish命令:

1
/usr/local/varnish/bin/varnishadm-T 127.0.0.1:3500 help
Available commands:
ping [timestamp]
status
start
stop
stats
vcl.load
vcl.inline <quoted_vclstring>
vcl.use
vcl.discard
vcl.list
vcl.show
param.show [-l] []
param.set
help [command]
url.purge
dump.pool

3、通过Varnish管理端口,使用正则表达式批量清除缓存:
  (1)、例:清除类似 http://www.newasp.net/soft/64150.html 的URL地址):

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

(2)、例:清除类似 http://www.newasp.net/tech 的URL地址:

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

(3)、例:清除所有缓存:

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

4、一个清除Squid缓存的PHP函数(清除Varnish缓存同样可以使用该函数,无需作任何修改,十分方便):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php 
functionpurge($ip,$url) 
    $errstr=''; 
    $errno=''; 
    $fp=fsockopen($ip, 80,$errno,$errstr, 2); 
    if(!$fp) 
    { 
         returnfalse; 
    } 
    else 
    { 
        $out="PURGE $url HTTP/1.1\r\n"; 
        $out.="Host:www.newasp.net\r\n"; 
        $out.="Connection: close\r\n\r\n"; 
        fputs($fp,$out); 
        $out=fgets($fp, 4096); 
        fclose ($fp); 
        returntrue; 
    } 
   
purge("192.168.0.4","/index.php"); 
?>

附1:Varnish官方网站:http://www.varnish-cache.org/

  附2:2007年12月10日,我写了一个每天0点运行,按天切割Varnish日志,生成一个压缩文件,同时删除上个月旧日志的脚本(/var/logs/cutlog.sh):
  /var/logs/cutlog.sh文件内容如下:

1
2
3
4
5
6
7
8
9
10
#!/bin/sh
# This file run at 00:00
date=$(date-d"yesterday"+"%Y-%m-%d")
pkill -9 varnishncsa
mv/var/logs/youvideo.log/var/logs/${date}.log
/usr/local/varnish/bin/varnishncsa-n/var/vcache-w/var/logs/youvideo.log &
mkdir-p/var/logs/youvideo/
gzip-c/var/logs/${date}.log >/var/logs/youvideo/${date}.log.gz
rm-f/var/logs/${date}.log
rm-f/var/logs/youvideo/$(date-d"-1 month"+"%Y-%m*").log.gz

设置在每天00:00定时执行:

1
2
3
/usr/bin/crontab-e
# 或者  
vi/var/spool/cron/root

输入以下内容:

0 0 * * * /bin/sh /var/logs/cutlog.sh

© 著作权归作者所有

共有 人打赏支持
mac_zhao
粉丝 42
博文 249
码字总数 304671
作品 0
普陀
程序员
私信 提问
关于代理服务器及负载均衡的一些想法

研究代理服务及负载均衡服务有一段时间了,也发现了不少问题。当然我这里的问题主要集中在我所负责的网络应用环境中。 需求:为正向代理做负载 方案一:LVS+Nginx 方案二:LVS+Squid 方案三:...

zisehuainian
06/28
0
0
HTTP加速器——VARNISH

一、前言 首先来简单认识一下什么是varnish?它能实现什么样的功能?....... Varnish是一款高性能的开源HTTP加速器,常见的缓存服务开源解决方案有varnish、nginx、squid 、ats等,Varnish 的...

MRUJ
2017/11/14
0
0
基于Varnish 3.0.4的网站静态加速

Varnish 的一些特点: (1)、是基于内存缓存,重启后数据将消失; (2)、利用虚拟内存方式,I/O 性能好; (3)、支持设置 0~60 秒内的精确缓存时间; (4)、VCL 配置管理比较灵活; (5)、32位机器...

workming
06/29
0
0
Varnish 4全面解析

简介 Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高、速度更快、管理更加方...

xxrenzhe11
2014/05/07
0
0
六款优秀的 Linux Web 缓存软件

超文本传输 协议(HTTP)是互联网基本协议之一,主要用于分布式、协作式、超媒体的信息系统。通过HTTP,客户端向服务器端发送资源请求, 服务器端返回所请求资源如图像、样式表和JavaScript。...

红薯
2011/04/23
4.7K
5

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot + Mybatis 配置多数据源(Srping boot 二)

前置条件,你已经配置好spring boot+mybatis,可以参考之前的博客 实现逻辑通过注解+aop切面编程来动态更新datasource 第一步,配置多个DataSource server: port: 8080freezing: ...

小海bug
7分钟前
0
0
连续潜在变量---概率PCA

最大似然PCA 用于PCA的EM算法 贝叶斯PCA 因子分解

中国龙-扬科
13分钟前
1
0
Mac 安装redis 及 redis desktop manager

1.安装redis 1.1 下载地址: http://download.redis.io/releases/ 1.2 本地新建个redis文件夹 1.3 切换到redis 安装下:cd /Users/用户名/Documents/redis/redis-3.2.5 1.4 make install 1.5......

qimh
18分钟前
1
0
Caffe(二)-Python-自定义网络

这里我们用一个例子先来体验一下 首先定义一下我们的环境变量 $PYTHONPATH,我这儿是Windows开发环境,至于Windows Caffe怎么编译由读者自己下去搞定 我使用的控制台是 Windows PowerShell 添...

Pulsar-V
今天
10
0
ActiveMQ从入门到精通(二)之可靠性机制

ActiveMQ的可靠性机制 缘由( 确认JMS消息) 只要消息被确认之后,才认为消息被成功消费了。消息的成功消费包括三个阶段:客户端接收消息、客户端处理消息以及客户端确认消息。在事务性会话中...

一看就喷亏的小猿
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部