varnish

来源:互联网 发布:idm下载器for mac 编辑:程序博客网 时间:2024/04/29 02:35

1.安装(实验环境rhel6.5)

yum localinstall -y varnish-3.0.3-1.el6.x86_64.rpm varnish-libs-3.0.3-1.el6.x86_64.rpm

 

 

2.配置

server1

 

###配置一个后端服务器

# vi /etc/varnish/default.vcl

backend web1 {

.host = "172.25.4.2";

.port = "80";

}

 

 

###配置 varnish 服务端口

# vi /etc/sysconfig/varnish

VARNISH_LISTEN_PORT=80

 


# service varnish start


server2,3

yum install httpd -y

vim /var/www/html/index.html

</h1>server2</h1>

 


server httpd start 

 

浏览器测试(访问172.25.4.1):

 

###查看缓存命中情况

# vi /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

 

 

###测试缓存命中

# curl -I 172.25.4.1

HTTP/1.1 200 OK

Server: Apache/2.2.15 (Red Hat)

Last-Modified: Thu, 20 Jul 2017 02:12:48 GMT

ETag: "20221-11-554b648f14601"

Content-Type: text/html; charset=UTF-8

Content-Length: 17

Accept-Ranges: bytes

Date: Thu, 20 Jul 2017 02:26:12 GMT

X-Varnish: 151548359

Age: 0

Via: 1.1 varnish

Connection: keep-alive

X-Cache: MISS from westos cache #未命中

 

# curl -I 172.25.4.1

HTTP/1.1 200 OK

Server: Apache/2.2.15 (Red Hat)

Last-Modified: Thu, 20 Jul 2017 02:12:48 GMT

ETag: "20221-11-554b648f14601"

Content-Type: text/html; charset=UTF-8

Content-Length: 17

Accept-Ranges: bytes

Date: Thu, 20 Jul 2017 02:27:57 GMT

X-Varnish: 151548360 151548359

Age: 105

Via: 1.1 varnish

Connection: keep-alive

X-Cache: HIT from westos cache #命中

 

### 通过 varnishadm 手动清除缓存

# varnishadm ban.url .*$ #清除所有

 

测试:


# varnishadm ban.url /index.html #清除 index.html

页面缓存

# varnishadm ban.url /admin/$ #清除 admin 目录缓存

 

###定义多个不同域名站点的后端服务器

# vi /etc/varnish/default.vcl

backend web1 {

.host = "172.25.4.2";

.port = "80";

}

backend web2 {

.host = "172.25.4.3";

.port = "80";

}

 


#当访问www.westos.org域名时从web1上取数据,访问 bbs.westos.org 域名时到web2取数据,访问其他页面报错。

sub vcl_recv {

if (req.http.host ~ "^(www.)?westos.org") {

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";

}

}


 server3的测试页:


 

# service varnish reload

测试:

访问www.westos.org

 

访问bbs.westos.org

 

访问其他页面

 

#定义varnish 的虚拟主机实现负载均衡

server1

vi /etc/varnish/default.vcl

backend web1 {

.host = "192.168.0.2";

.port = "80";

}

backend web2 {

.host = "192.168.0.3";

.port = "80";

}

director lb round-robin {

{.backend = web1;}

{.backend = web2;}   #把多个后端聚合为一个组

}

 

sub vcl_recv {

if (req.http.host ~ "^(www.)?westos.org") {

set req.http.host = "www.westos.org";

set req.backend = lb;

return (pass);     #为了测试方便,不进行缓存。

} elsif (req.http.host ~ "^bbs.westos.org") {

set req.backend = web1;

} else {

error 404 "westos cache";

}

}

 

sevver2

vim /etc/httpd/conf/httpd.conf

<VirtualHost *:80>

    DocumentRoot /var/www/html

    ServerName server2

</VirtualHost>

<VirtualHost *:80>

    DocumentRoot /www/bbs

    ServerName bbs.westos.org

</VirtualHost>

<VirtualHost *:80>

    DocumentRoot /www/westos

    ServerName www.westos.org

</VirtualHost>

 

mkdir /www/bbs -p

vim /www/bbs/index.html          ##建立测试页

 

mkdir /www/westos -p

vim /www/westos/index.html

 

测试:

访问www.westos.org会实现web1web2的轮询

 

 

 

访问bbs.westos.org

 

 


###varnish cdn 推送平台

httpd访问,需要在server1上修改httpd的配置文件,把80访问端口改成8080,以免冲突

vim /etc/httpd/conf/httpd.conf

 

 

http://code.google.com/p/varnish-php-bansys/

#需要安装 php 支持

unzip bansys.zip -d /var/www/html


vi /var/www/html/bansys/config.php

#只保留如下设置,其余注释掉

<?php

$var_group1 = array(

'host' => array('172.25.4.1'),

'port' => '80',

);

//varnish 群组定义

//对主机列表进行绑定

$VAR_CLUSTER = array(

'www.westos.org' => $var_group1,

);

//varnish 版本//2.x 和 3.x 推送命令不一样

$VAR_VERSION = "3";

?>

 

#bansys 有两种工作模式,分别是:telnet 和 http 模式。

#telnet 模式需要关闭 varnish 服务管理端口的验证,注释掉/etc/sysconfig/varnish 文件中的 “ -S $

{VARNISH_SECRET_FILE}”这行,重启 varnish 服务即可。

#如果是 http 模式需要对 varnish 做以下设置:

# vi /etc/varnish/default.vcl

acl westos {

#设置访问控制

"127.0.0.1";

"172.25.4.0"/24;

}

sub vcl_recv {

if (req.request == "BAN") {

if (!client.ip ~ westos) {

error 405 "Not allowed.";

}

ban("req.url ~ " + req.url);

error 200 "ban added";

}

}

 

# service varnish reload

 

在浏览器上访问172.25.4.1:8080

 

测试: