Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸Verdens Gang (http://www.vg.no) 使用3台Varnish代替了原来的12台squid,性能居然比以前更好。可见Varnish是一个相当强大的加速器。下面给大家介绍如何在CentOS上安装Varnish来给你的WordPress博客加速。
重启Varnish使其生效:
安装配置Varnish
一,什么是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):
2、创建Varnish日志目录(/var/logs/):
3、编译安装varnish:
4、创建Varnish配置文件:
输入以下内容:
通过netstat -tlnp查看nginx监控80端口。Varnish通过反向代理请求后端IP为127.0.0.1,端口为80的nginx服务器;
5、启动varnish:
解释一下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访问日志写入日志文件:
# 通过 Varnish 管理端口進行管理
# 清除具体URL地址
# 清除所有缓存
# 通过varnishstat监控varnish状态
1,安装Varnish
使用SSH登录你的VPS,执行下面的命令来安装Varnish:yum install varnish然后我们启动Varnish:
/etc/init.d/varnish start设置为开机启动:
chkconfig --level 345 varnish on
2,配置Varnish
打开default.vcl:nano /etc/varnish/default.vcl确认默认的default.vcl和下面的代码相匹配:
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
| # Back-End backend default { .host = "127.0.0.1" ; .port = "80" ; .connect_timeout = 60s; .first_byte_timeout = 10s; .between_bytes_timeout = 10s; } # Custom sub vcl_recv { remove req.http.X-Forwarded-For; set req.http.X-Forwarded-For = client.ip; if (req.url ~ "^/wp-(login|admin)" ) { return (pipe); } if (req.http.Cookie ~ "(wp-postpass|wordpress_logged_in|comment_author_)" ) { return (pipe); } if (req.request == "POST" ) { return (pass); } if (req.http.Cache-Control ~ "no-cache" ) { return (pass); } if (req.http.Authorization) { return (pass); } if (req.url ~ "\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pd f|txt|tar|wav|bmp|rtf|js|flv|swf|htm|html)$" ) { unset req.http.Cookie; unset req.http.Accept-Encoding; unset req.http.Vary; return (lookup); } if (req.http.Accept-Encoding) { if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$" ) { remove req.http.Accept-Encoding; } elsif (req.http.Accept-Encoding ~ "gzip" ) { set req.http.Accept-Encoding = "gzip" ; } elsif (req.http.Accept-Encoding ~ "deflate" ) { set req.http.Accept-Encoding = "deflate" ; } else { remove req.http.Accept-Encoding; } } if (req.backend.healthy) { set req.grace = 30s; } else { set req.grace = 1h; } unset req.http.Cookie; unset req.http.Vary; return (lookup); } sub vcl_fetch { set beresp.grace = 1h; unset beresp.http. set -cookie; if (req.url ~ "\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pd f|txt|tar|wav|bmp|rtf|js|flv|swf|htm|html)$" ) { set beresp.ttl = 24h; } else { set beresp.ttl = 5m; } return (deliver); } sub vcl_deliver { if (obj.hits > 0) { set resp.http.X-Cache = "HIT" ; } else { set resp.http.X-Cache = "MISS" ; } set resp.http.Cache-Control = "private" ; set resp.http.Pragma = "private" ; remove resp.http.X-Varnish; remove resp.http.Via; remove resp.http.Age; remove resp.http.Server; remove resp.http.X-Powered-By; } sub vcl_pipe { set bereq.http.connection = "close" ; } |
/etc/init.d/varnish restart-------------------------------------------
安装配置Varnish
一,什么是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):
1
2
3
4
5
| /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 |
1
2
3
| mkdir -p / var /logs chmod +w / var /logs chown -R www:www / var /logs |
1
2
3
4
5
6
7
8
| 官方下载地址: 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 |
1
| vim /usr/local/varnish/etc/varnish/ default .vcl |
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| 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); } |
5、启动varnish:
1
2
3
4
| /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 |
参数说明:
-n 缓存写入路径
-f 指定配置文件启动
-a 监听本机的网卡的80端口
-T 指定本机的varnish管理端口
-s file 指定varnish缓存文件的位置以及大小
-w 指处理的最小请求数、最大请求数、超时时间
-g 组名
-u 用户名
-p client_http11=on 支持http1.1协议
-P 指定其进程码文件的位置
6、启动varnishncsa用来将Varnish访问日志写入日志文件:
1
| /usr/local/varnish/bin/varnishncsa -n / var /vcache -w / var /logs/varnish.log & |
1
| /usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 help |
1
2
| /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*$ |
1
| /usr/local/varnish-2.1/bin/varnishadm -T 127.0.0.1:3500 url.purge *$ |
1
| /usr/local/varnish/bin/varnishstat –n var /vcache ------------------------------------------------------------- |