實驗主機:varnish 172.25.44.1
server1 172.25.44.10
server2 172.25.44.20
簡介:
varnish : varnish是一款高性能的開源HTTP加速器。
實驗環境:
主機的iptables處於off狀態,setenforce 0
實驗流程:
在server1和server2主機上:
yum install httpd -y
cd /var/www/html/
echo server1(2)\'s page > index.html
/etc/init.d/httpd start
瀏覽器訪問主機IP172.25.44.10和172.25.44.20是否成功。
在varnish主機上:
yum install varnish-3.0.5-1.el6.x86_64.rpm -y #從網上下載再安裝
yum install varnish-libs-3.0.5-1.el6.x86_64.rpm -y #從網上下載再安裝
vi /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80 #設定varnish的端口爲80
vi /etc/varnish/default.vcl
backend server1 {
.host = "172.25.44.10" ; #指定apache所在的主機
.port = "80"; #apache端口
}
/etc/init.d/varnish start #啓動varnish服務
netstat -antlpe #查看80端口是否開啓成功
瀏覽器訪問172.25.44.1 #顯示的是server1主機的信息
vi /etc/varnish/default.vcl ##設定查看緩存信息
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from varnish cache"; ##緩存命中
}
else {
set resp.http.X-Cache = "MISS from varnish cache"; ##緩存未命中
}
return (deliver);
}
/etc/init.d/varnish restart ##重啓varnish服務
curl -I 172.25.44.30
#如果出現X-Cache : MISS from varnish cache 則表示緩存未命中
#如果出現X-Cache : HIT from varnish cache 則表示緩存命中
【緩存無法同步問題】
緩存不過期頁面無法刷新,通過varnishadm手動清除緩存
# varnishadm ban.url .*$ #清除所有
# varnishadm ban.url /index.html #清除index.html頁面緩存
# varnishadm ban.url /admin/$ #清除admin目錄緩存
【定義多個不同域名站點的後端服務器】
vi /etc/varnish/default.vcl
backend server1 {
.host = "172.25.44.20";
.port = "80";
}
backend westos {
.host = "172.25.44.10";
.port = "80";
}
sub vcl_recv { ##網頁緩存
if (req.http.host ~ "^(www.)?westos.com") { ##訪問中是否帶www
set req.http.host = "www.westos.com"; 都定向到www上
set req.backend = westos; ##訪問的主機
} elsif (req.http.host ~ "^(www.)?linux.com") { ##訪問中是否帶www都定向到www上
set req.http.host = "www.linux.com";
set req.backend = westos;
} else {error 404 "varnish cache";
}
}
/etc/init.d/varnish restart ##重啓varnish服務
在server1主機上:
vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
DocumentRoot /www/westos.com/html
ServerName www.westos.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/linux.com/html
ServerName www.linux.com
</VirtualHost>
/etc/init.d/httpd restart
mkdir -p /www/westos.com/html
mkdir -p /www/linux.com/html
echo server1\'s www.westos.com > /www/westos.com/html/index.html
echo server1\'s www.linux.com > /www/linux.com/html/index.html
配置做完後在瀏覽器所在的真實主機上
vim /etc/hosts
172.25.44.1 www.westos.com
172.25.44.1 www.linux.com
172.25.44.1 server1.example.com
瀏覽器訪問www.westos.com和www.linux.com
【負載均衡器】
在server2主機上配置好http的虛擬主機
配置和server1主機一樣
在varnish主機上:
vi /etc/varnish/default.vcl
director westoslb round-robin {
{ .backend = server1; }
{ .backend = westos; }
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = westoslb;
return (pass); ##方便測試,不緩存
} elsif (req.http.host ~ "^(www.)?linux.com") {
set req.http.host = "www.linux.com";
set req.backend = westoslb;
}
elsif (req.http.host ~ "^server1.example.com" ){
set req.backend = server1;
}
else {error 404 "varnish cache";
}
}
/etc/init.d/varnish restart
瀏覽器訪問網頁,並且不斷刷新
【varnish cdn推送平臺】
在varnish主機上:
yum install httpd -y
vi /etc/httpd/conf/httpd.conf
Listen 8080 #修改http的端口爲8080,因爲varnish中使用的端口已經是80端口,如果不修改,則httpd服務起不來。
/etc/init.d/httpd start
yum install unzip
unzip bansys.zip -d /var/www/html #從網上下載獲得
yum install php -y
# vi /var/www/html/bansys/config.php #只保留如下設置,其餘註釋掉
<?php
///////////////////////數據庫信息/////////////////////////
//數據庫信息
# $host = "localhost";
# $user = "";
# $passwd = "";
# $dbname = "bansys";
# $conn = mysql_connect($host, $user, $passwd) or die('Unable to connect database...');
# mysql_select_db($dbname,$conn);
# $query = "select ResourceIP from purgeapp_resource";
# $results = mysql_query($query,$conn);
#
# while ($row=mysql_fetch_row($results)) {
# $varnish_host[] = $row[0];
# }
# #mysql_close($conn);
////////////////////////////////////////////////////////
//varnish主機列表
//可定義多個主機列表
$var_group1 = array(
'host' => array('172.25.44.1'),
'port' => '6082',
);
//這個使用了mysql讀取數據
# $var_group3 = array(
# 'host' => $varnish_host,
# 'port' => '6082',
# );
//varnish羣組定義
//對主機列表進行綁定
$VAR_CLUSTER = array(
'www.westos.com' => $var_group1,
);
//varnish版本
//2.x和3.x推送命令不一樣
$VAR_VERSION = "3";
?>
vi /etc/varnish/default.vcl
acl bansys {
"172.25.44.1";
"172.25.44.0"/24;
}
sub vcl_recv {
if (req.request == "BAN") {
if (!client.ip ~ bansys) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
if (req.http.host ~ "^(www.)?westos.com") {
set req.http.host = "www.westos.com";
set req.backend = westoslb;
#return (pass);
} elsif (req.http.host ~ "^(www.)?linux.com") {
set req.http.host = "www.linux.com";
set req.backend = westoslb;
}
elsif (req.http.host ~ "^server1.example.com" ){
set req.backend = server1;
}
else {error 404 "varnish cache";
}
}
/etc/init.d/httpd restart
/etc/init.d/varnish restart
在瀏覽器的真實主機上:
curl -I http://www.westos.com/index.html
#如果出現X-Cache : MISS from varnish cache 則表示緩存未命中
#如果出現X-Cache : HIT from varnish cache 則表示緩存命中
訪問172.25.44.1/bansys
cdn進行推送刷新緩存
curl -I http://www.westos.com/index.html
#緩存刷新成功後爲MISS