Chinaunix首页 | 论坛 | 博客
  • 博客访问: 135407
  • 博文数量: 33
  • 博客积分: 2021
  • 博客等级: 大尉
  • 技术积分: 670
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-27 16:08
文章分类

全部博文(33)

文章存档

2013年(7)

2011年(10)

2010年(1)

2009年(11)

2008年(4)

我的朋友

分类: LINUX

2008-10-22 16:08:07

声明:
下面的安装步骤安全参照张宴的<<使用Varnish代替Squid做网站缓存加速器的详细解决方案>>一文操作,转载于:http://blog.s135.com.
文中结合的自已在操作中遇到了一点问题,并穿插记录其中.
故特记于此,以备以后查阅


1、创建www用户和组,以及Varnish缓存文件存放目录(/var/vcache):
Java代码 复制代码
  1. /usr/sbin/groupadd www -g 48  
  2. /usr/sbin/useradd -u 48 -g www www   
  3. mkdir -p /var/vcache   
  4. chmod +w /var/vcache   
  5. chown -R www:www /var/vcache  

2、创建Varnish日志目录(/var/logs/):
Java代码 复制代码
  1. mkdir -p /var/logs   
  2. chmod +w /var/logs   
  3. chown -R www:www /var/logs  

3、编译安装varnish:
Java代码 复制代码
  1. wget http://blog.s135.com/soft/linux/varnish/varnish-1.1.2.tar.gz   
  2. tar zxvf varnish-1.1.2.tar.gz   
  3. cd varnish-1.1.2  
  4. ./configure --prefix=/usr/local/varnish   
  5. make && make install  

注意,我在进行make步骤时,出现如下错误:
"varnishhist.c:35:20: error: curses.h: No such file or directory"
造成该问题的原因是因为系统中少了ncurses-devel包,由于我的平台是CentOS,可用如下命令进行安装该ncurses-devel包:
Java代码 复制代码
  1. yum install ncurses-devel  


安装成功后,再重新执行make && make install
4、创建Varnish配置文件:
Java代码 复制代码
  1. vi /usr/local/varnish/vcl.conf  

输入以下内容:
Java代码 复制代码
  1. backend myblogserver {    
  2.        set backend.host = "192.168.0.5";    
  3.        set backend.port = "80";    
  4. }   
  5.   
  6. acl purge {   
  7.        "localhost";   
  8.        "127.0.0.1";   
  9.        "192.168.1.0"/24;   
  10. }   
  11.   
  12. sub vcl_recv {   
  13.        if (req.request == "PURGE") {   
  14.                if (!client.ip ~ purge) {   
  15.                        error 405 "Not allowed.";   
  16.                }   
  17.                lookup;   
  18.        }   
  19.   
  20.        if (req.http.host ~ "^blog.s135.com") {   
  21.                set req.backend = myblogserver;    
  22.                if (req.request != "GET" && req.request != "HEAD") {   
  23.                        pipe;   
  24.                }   
  25.                else {   
  26.                        lookup;   
  27.                }   
  28.        }   
  29.        else {   
  30.                error 404 "Zhang Yan Cache Server";    
  31.                lookup;   
  32.        }   
  33. }   
  34.   
  35. sub vcl_hit {   
  36.        if (req.request == "PURGE") {   
  37.                set obj.ttl = 0s;   
  38.                error 200 "Purged.";   
  39.        }   
  40. }   
  41.   
  42. sub vcl_miss {   
  43.        if (req.request == "PURGE") {   
  44.                error 404 "Not in cache.";   
  45.        }   
  46. }   
  47.   
  48. sub vcl_fetch {   
  49.        if (req.request == "GET" && req.url ~ "\.(txt|js)$") {   
  50.                set obj.ttl = 3600s;   
  51.        }   
  52.        else {   
  53.                set obj.ttl = 30d;   
  54.        }   
  55. }  

这里,我对这段配置文件解释一下:
  (1)、Varnish通过反向代理请求后端IP为192.168.0.5,端口为80的web服务器;
  (2)、Varnish允许localhost、127.0.0.1、192.168.0.***三个来源IP通过PURGE方法清除缓存;
  (3)、Varnish对域名为blog.s135.com的请求进行处理,非blog.s135.com域名的请求则返回“Zhang Yan Cache Server”;
  (4)、Varnish对HTTP协议中的GET、HEAD请求进行缓存,对POST请求透过,让其直接访问后端Web服务器。之所以这样配置,是因为POST请求一般是发送数据给服务器的,需要服务器接收、处理,所以不缓存;
  (5)、Varnish对以.txt和.js结尾的URL缓存时间设置1小时,对其他的URL缓存时间设置为30天。
5、启动Varnish
Java代码 复制代码
  1. ulimit -SHn 51200  
  2. /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、启动varnishncsa用来将Varnish访问日志写入日志文件:
Java代码 复制代码
  1. /usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/varnish.log &  

7、如果想配置成开机自动启动Varnish
Java代码 复制代码
  1. vi /etc/rc.local  

 在末尾增加以下内容:
Java代码 复制代码
  1. ulimit -SHn 51200  
  2. /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   
  3. /usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/youvideo.log &  

8、优化Linux内核参数
Java代码 复制代码
  1. vi /etc/sysctl.conf  

在末尾增加以下内容:
Java代码 复制代码
  1. net.ipv4.tcp_fin_timeout = 30  
  2. net.ipv4.tcp_keepalive_time = 300  
  3. net.ipv4.tcp_syncookies = 1  
  4. net.ipv4.tcp_tw_reuse = 1  
  5. net.ipv4.tcp_tw_recycle = 1  
  6. net.ipv4.ip_local_port_range = 5000    65000  

再看看如何管理Varnish:
 1、查看Varnish服务器连接数与命中率:
Java代码 复制代码
  1. /usr/local/varnish/bin/varnishstat -n /var/vcache  

输出的结果如下图显示:

 2、通过Varnish管理端口进行管理:
  用help看看可以使用哪些Varnish命令:
Java代码 复制代码
  1. /usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 help  

 3、通过Varnish管理端口,使用正则表达式批量清除缓存:
  (1)、例:清除类似http://blog.s135.com/a/zhangyan.html的URL地址):
Java代码 复制代码
  1. /usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge /a/  

   (2)、例:清除类似http://blog.s135.com/tech的URL地址:
Java代码 复制代码
  1. /usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge w*$  

   (3)、例:清除所有缓存:
Java代码 复制代码
  1. /usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge *$  

附1:2007年12月10日,我写了一个每天0点运行,按天切割Varnish日志,生成一个压缩文件,同时删除上个月旧日志的脚本(/var/logs/cutlog.sh):
  /var/logs/cutlog.sh文件内容如下:
Java代码 复制代码
  1. #!/bin/sh   
  2. # This file run at 00:00  
  3. date=$(date -d "yesterday" +"%Y-%m-%d")   
  4. pkill -9 varnishncsa   
  5. mv /var/logs/youvideo.log /var/logs/${date}.log   
  6. /usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/youvideo.log &   
  7. mkdir -p /var/logs/youvideo/   
  8. gzip -c /var/logs/${date}.log > /var/logs/youvideo/${date}.log.gz   
  9. rm -f /var/logs/${date}.log   
  10. rm -f /var/logs/youvideo/$(date -d "-1 month" +"%Y-%m*").log.gz  


设置在每天00:00定时执行:
Java代码 复制代码
  1. /usr/bin/crontab -e  

或者  
Java代码 复制代码
  1. vi /var/spool/cron/root  
 
输入以下内容:
Java代码 复制代码
  1. 0 0 * * * /bin/sh /var/logs/cutlog.sh  
阅读(1030) | 评论(0) | 转发(0) |
0

上一篇:增强XP远程管理功能

下一篇:iptables实现NAT

给主人留下些什么吧!~~