文档章节

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

mac_zhao
 mac_zhao
发布于 2015/06/23 14:34
字数 1391
阅读 26
收藏 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
粉丝 41
博文 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
六款优秀的 Linux Web 缓存软件

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

红薯
2011/04/23
4.6K
5
六款优秀的Linux Web缓存开源软件

为了满足永无止境的Web需求,Web缓存正成为优化特定时间内数据传送量的至关重要的机制,它有助于减少延迟,加快网页载入,防止终端用户失去耐心。Web缓存优化了客户端和服务 器端之间的数据流...

mickelfeng
2013/06/07
0
0
Varnish 4.0 正式版发布,开源HTTP加速器

Varnish 4.0 正式版发布了,下载地址:varnish-4.0.0.tar.gz 该版本主要改进包括: 完全支持流对象 后台获取失效的对象 新的 varnishlog 查询语言,允许对请求进行自动分组 复杂的请求时间戳...

oschina
2014/04/11
6.4K
6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

八大包装类型的equals方法

先看其中一个源码 结论:八大包装类型的equals方法都是先判断类型是否相同,不相同则是false,相同则判断值是否相等 注意:包装类型不能直接用==来等值比较,否则编译报错,但是数值的基本类型...

xuklc
34分钟前
1
0
NoSQL , Memcached介绍

什么是NoSQL 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗...

TaoXu
昨天
0
0
890. Find and Replace Pattern - LeetCode

Question 890. Find and Replace Pattern Solution 题目大意:从字符串数组中找到类型匹配的如xyy,xxx 思路: 举例:words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb"abc ......

yysue
昨天
0
0
Linux | Redis

写在前面的话 常言道,不作笔记不读书。在下是深有体会啊,所以,跟我一起做下本节的笔记吧,或许多年以后,你一定会感谢今天的你。 安装 在官网的下载页 Redis Download 直接写了在Linux的安...

冯文议
昨天
1
0
NoSQL-memcached

NoSQL介绍 NoSQL叫非关系型数据库。而关系型数据库代表有MySQL。对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很...

ln97
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部