1.安裝varnish
http :// repo . varnish - cache . org / redhat / varnish -3.0/ el 6/ x 86_64/
# yum install varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y
2.配置
### 配置一個後端服務器
# vim /etc/varnish/default.vcl
backend default {
.host = "172.25.7.2";
.port = "80";
}
### 配置 varnish 服務端口
# vim /etc/sysconfig/varnish
66 VARNISH_LISTEN_PORT=80
### 重啓varnish
# /etc/init.d/varnish start
# service varnish start
### 查看緩存命中情況
# vim /etc/varnish/default.vcl
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
# service varnish reload
在172.25.7.2上:
[root@server2 ~]# cat /var/www/html/index.html
<h1>server2</h1>
###測試緩存命中
[root@foundation7 varnish]# curl www.westos.org
<h1>server2</h1>
[root@foundation7 varnish]# curl -I 172.25.7.1
HTTP/1.1 200 OK
Server: Apache/2.2.15 (Red Hat)
Last-Modified: Wed, 19 Jul 2017 09:05:44 GMT
ETag: "7fc25-8-554a7efdcc97c"
Content-Type: text/html; charset=UTF-8
Content-Length: 8
Accept-Ranges: bytes
Date: Thu, 20 Jul 2017 03:29:11 GMT
X-Varnish: 1699361872 1699361871
Age: 35
Via: 1.1 varnish
Connection: keep-alive
X-Cache: HIT from westos cache## 命中
[root@foundation7 varnish]# curl -I 172.25.7.1
HTTP/1.1 200 OK
Server: Apache/2.2.15 (Red Hat)
Last-Modified: Wed, 19 Jul 2017 09:05:44 GMT
ETag: "7fc25-8-554a7efdcc97c"
Content-Type: text/html; charset=UTF-8
Content-Length: 8
Accept-Ranges: bytes
Date: Thu, 20 Jul 2017 03:29:08 GMT
X-Varnish: 1699361871
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Cache: MISS from westos cache## 未命中
### 通過 varnishadm 手動清除緩存
# varnishadm ban.url .*$ #清除所有
# varnishadm ban.url /index.html #清除 index.html 頁面緩存
# varnishadm ban.url /admin/$ #清除 admin 目錄緩存
###定義多個不同域名站點的後端服務器
# vim /etc/varnish/default.vcl
12 backend web1 {
13 .host = "172.25.7.2";
14 .port = "80";
15 }
16
17 backend web2 {
18 .host = "172.25.7.3";
19 .port = "80";
20 }
#當訪問 www.westos.org 域名時從 web1 上取數據,訪問 bbs.westos.org 域名時到 web2 取數據,
訪問其他頁面報錯。
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org<h1>server2</h1>
") {
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
}
# service varnish reload
測試:當訪問 www.westos.org 域名時從 web1 上取數據,訪問 bbs.westos.org 域名時到 web2 取數據,訪問其他頁面報錯
[root@foundation7 ~]# curl www.westos.org
<h1>server2</h1>
[root@foundation7 ~]# curl westos.org
<h1>server2</h1>
[root@foundation7 ~]# curl bbs.westos.org
<h1>server3-bbs.wesros.org</h1>
[root@foundation7 ~]# curl 172.25.7.1 -I
HTTP/1.1 404 westos cache
Server: Varnish
Content-Type: text/html; charset=utf-8
Retry-After: 5
Content-Length: 398
Accept-Ranges: bytes
Date: Thu, 20 Jul 2017 06:27:58 GMT
X-Varnish: 1539950550
Age: 0
Via: 1.1 varnish
Connection: close
X-Cache: MISS from westos cache
###定義負載均衡
1.#定義健康檢查
probe healthcheck {
.url = "/index.html"; # 哪個 url 需要 varnish 請求
.interval = 5s; #檢查的間隔時間
.timeout = 1s; #等待多長時間探針超時
.window = 5; #維持 5 個 sliding window 的結果
.threshold = 3; #至少有三次 window 是成功的,就宣告 bachend 健康
}
2.# vim /etc/httpd/conf/httpd.conf
136 Listen 8080 監聽8080端口
3.# vim /etc/varnish/default.vcl
9 backend web1 {
10 .host = "172.25.7.2";
11 .port = "80";
12 }
13
14 backend web2 {
15 .host = "172.25.7.3";
16 .port = "80";
17 }
18 director lb round-robin {#把多個後端聚合爲一個組,並檢測後端健康狀況
19 {.backend = web1;}
20 {.backend = web2;}
21}
22 sub vcl_recv {
23 if (req.http.host ~ "^(www.)?westos.org") {
24 set req.http.host = "www.westos.org";
25 set req.backend = lb;
26 return (pass);#爲了測試方便,不進行緩存。
27 } elsif (req.http.host ~ "^bbs.westos.org") {
28 set req.backend = web2;
29 } else {error 404 "westos cache";
30 }
31 }
# service varnish reload
測試:網頁自動刷新用F5
命令: for i in {1..10};do curl www.westos.org/index.html; done
<h1>server2-www.westos.org</h1>
<h1>server3-www.wesros.org</h1>
<h1>server2-www.westos.org</h1>
<h1>server3-www.wesros.org</h1>
<h1>server2-www.westos.org</h1>
<h1>server3-www.wesros.org</h1>
<h1>server2-www.westos.org</h1>
<h1>server3-www.wesros.org</h1>
<h1>server2-www.westos.org</h1>
<h1>server3-www.wesros.org</h1>
###varnish cdn 推送平臺
1.安裝php
# yum install unzip -y
# unzip bansys.zip -d /var/www/html/#解壓到指定目錄
# yum install php -y
2.配置服務
# vim /var/www/html/bansys/config.php #只保留如下設置,其餘註釋掉
25 //varnish主機列表
26 //可定義多個主機列表
27 $var_group1 = array(
28 'host' => array('172.25.7.1'),
29 'port' => '80',
30 );
31
32
33 //varnish羣組定義
34 //對主機列表進行綁定
35 $VAR_CLUSTER = array(
36 'www.westos.org' => $var_group1,
37 );
38
39
40 //varnish版本
41 //2.x和3.x推送命令不一樣
42 $VAR_VERSION = "3";
43
44 ?>
3.#bansys 有兩種工作模式,分別是:telnet 和 http 模式。
#telnet 模式需要關閉 varnish 服務管理端口的驗證,註釋掉/etc/sysconfig/varnish 文件中的 “ -S $
{VARNISH_SECRET_FILE}”這行,重啓 varnish 服務即可。
#如果是 http 模式需要對 varnish 做以下設置:
# vim /etc/varnish/default.vcl
7 acl westos {
8 "172.25.7.1";#設置訪問控制
9 "172.25.7.0"/24;
10 }
27 sub vcl_recv {
28
29 if (req.request == "BAN") {
30 if (!client.ip ~ westos) {
31 error 405 "Not allowed.";
32 }
33 ban("req.url ~ " + req.url);
34 error 200 "ban added";
35 }
36 }
# service varnish reload
htppd服務端:
[root@server2 westos]# cat /www/westos/index.html
<h1>server2-www.westos.org</h1>
<h1>server2-www.westos.org</h1>
<h1>server2-www.westos.org</h1>
<h1>server2-www.westos.org</h1>
<h1>server2-www.westos.org</h1>
<h1>server2-www.westos.org</h1>
<h1>server2-www.westos.org</h1>
[root@server3 ~]# cat /var/www/html/index.html
<h1>server3-www.wesros.org</h1>
# service httpd restart
測試:當推送時界面輪詢一次