天天看点

varnish

varnish

可以提高网页的访问速度,提高服务器系统,降低访问压力,客户端访问时,dns其实是解析到varnish,然后,如果varnish里有客户端所需要的内容,则将内容给客户端,如果没有,则varnish到后端服务器去取来发给客户端的同时,还会缓存一份,这样,如果有别的客户端要访问就可以通过缓存快速获取到

一 主机环境

安装rhel6.5的虚拟机 --> 通过网络安装 --> URL --> Memory(rhel6.5版本最小为512M,如果比这个小虽然能安装但是会出现问题,由于主机内存问题,所以安装最小的512M) -- > 硬盘 -- > 虚拟机名字

虚拟机安装过程选项:

安装过程的语言:

键盘:

ip4:

re-initialize all:

超级用户的密码:

####封装#####

1 hostname server1

2 vi /etc/sysconfig/network        ###修改主机名###

内容:

NETWORK = yes

HOSTNAME = server1

vi /etc/yum.repos.d/rhel-source.repo    ###修改yum仓库###

内容:

baseurl = http://172.25.254.78/rhel6.5

enable = 1        ###激活仓库###

yum install -y vim lftp  openssh-clients 

cd /etc/udev/rules.d/

rm -f 70-persistent-net.rules        ###这个文件会将eth0占用着,导致下一次启动时,由于物理地址的改变会使得没有网卡分配,而无法启动###

vim /etc/sysconfig/network-scripts/ifcfg-eth0

/etc/init.d/network    restart

cd /etc/ssh/

rm -fr ssh_host_*

/etc/init.d/sshd  restart

rm -f /etc/sysconfig/iptables        ###删除防火墙策略###

chkconfig  iptables  off        ###关闭防火墙###

vim /ect/sysconfig/selinux        ###关闭selinux

vim /etc/hosts

poweroff

####建立快照####

virsh undefine base        删除vm的前端管理,不会删除存储

[root@foundation78 images]# qemu-img  create -f qcow2 -b base.qcow2 vm1

Formatting 'vm1', fmt=qcow2 size=21474836480 backing_file='base.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 

[root@foundation78 images]# qemu-img  create -f qcow2 -b base.qcow2 vm2

Formatting 'vm2', fmt=qcow2 size=21474836480 backing_file='base.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 

[root@foundation78 images]# qemu-img  create -f qcow2 -b base.qcow2 vm3

Formatting 'vm3', fmt=qcow2 size=21474836480 backing_file='base.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 

二 varnish配置

###将server1作为varnish###

1 安装包:

varnish-3.0.5-1.el6.x86_64.rpm

varnish-libs-3.0.5-1.el6.x86_64.rpm

2 配置文件

主配置文件:/etc/sysconfig/varnish

子配置文件:/etc/varnish/default.vcl

1)为了访问的方便,将varnish的端口该成80,这样输入网址即可访问到varnish

在/etc/sysconfig/varnish修改:

 66 VARNISH_LISTEN_PORT=80

2)指定后端:访问172.25.78.2的80端口

vim /etc/varnish/default.vcl

backend default {

  .host = "172.25.78.2";    ###要访问的后端服务器的ip##

  .port = "80";            ###端口###

}

###查看缓存命中情况

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

3 reload varnish服务

[root@server1 varnish]# /etc/init.d/varnish start

[root@server1 varnish]# /etc/init.d/varnish reload

Loading vcl from /etc/varnish/default.vcl

Current running config name is boot

Using new config name reload_2017-07-19T10:02:29

VCL compiled.

available       0 boot

active          0 reload_2017-07-19T10:02:29

Done

###在后端服务器server2的操作###

1 yum install -y httpd

2  vim /var/www/html/index.html

<h1>server2</h1>

~                  

3 /etc/init.d/httpd start        ###开启服务### 

4 /etc/init.d/httpd restart        ###重启服务###

过程如下:

[root@server2 ~]# vim /var/www/html/index.html

[root@server2 ~]# /etc/init.d/httpd restart

Stopping httpd:                                            [FAILED]

Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.78.2 for ServerName

                                                           [  OK  ]

[root@server2 ~]# /etc/init.d/httpd start

Starting httpd: 

Stopping httpd:                                            [  OK  ]

[root@server2 ~]# vim /etc/yum.repos.d/rhel-source.repo 

[root@server2 ~]# vim /var/www/html/index.html  

测试:

用172.25.254.78访问varnish主机即server1主机,查看结果

###测试缓存命中###

[root@foundation78 iso]# curl -I 172.25.78.1

HTTP/1.1 200 OK

Server: Apache/2.2.15 (Red Hat)

Last-Modified: Wed, 19 Jul 2017 02:07:02 GMT

ETag: "8d2-11-554a216807226"

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

Content-Length: 17

Accept-Ranges: bytes

Date: Wed, 19 Jul 2017 02:13:06 GMT

X-Varnish: 1793081648 1793081642

Age: 119                ###缓存时间,超过120s就会清除缓存重新到后端获取###

Via: 1.1 varnish

Connection: keep-alive

X-Cache: HIT from westos cache        ###缓存命中,说明缓存中有###

Date: Wed, 19 Jul 2017 02:13:07 GMT

X-Varnish: 1793081649

Age: 0                    

X-Cache: MISS from westos cache        ###超过了120s,缓存被清除了,所以缓存中没有,要到后端服务器去取###

###用curl命令查看server1主机访问到的内容###

[root@foundation78 iso]# vim /etc/hosts

72.25.78.1 server1 www.westos.org bbs.westos.com westos.com

[root@foundation78 iso]# curl www.westos.org

[root@foundation78 iso]# 

三 通过varnishadm 手动清除缓存

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

varnishadm ban.url /index.html        #清除 index.html 页面缓存

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

过程如下:

###varnish端###

[root@server1 varnish]# varnishadm ban.url .*$

[root@server1 varnish]# 

[root@server1 varnish]# varnishadm ban.url  www.westos.org/index.html

###访问端###

Date: Wed, 19 Jul 2017 02:30:34 GMT

X-Varnish: 1793081653

Age: 0

X-Cache: MISS from westos cache

[root@foundation78 iso]# curl -I www.westos.org

Date: Wed, 19 Jul 2017 02:32:27 GMT

X-Varnish: 1793081654

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

1 vim /etc/varnish/default.vcl

内容如下:

backend web1 {                ###web1只是一个别名###

  .host = "172.25.78.2";

  .port = "80";

backend web2 {

  .host = "172.25.78.3";

###该语句块是所有varnish的入口,会读取该语句块的内容###

sub vcl_recv {

if (req.http.host ~ "^(www.)?westos.org") {        ###不论访问是www.westos.org还是westos.org都将其变成www.westos.org###

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

set req.backend = web1;     ###访问www.westos.org的varnish的后端服务器是web1即server2###

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

set req.backend = web2;        ###访问bbs.westos.org的varnish的后端服务器是web2即server3

} else {error 404 "westos cache";    ###除此之外的访问均404报错###

2 /etc/init.d/varnish reload

3 server3的配置

yum install -y httpd

/etc/init.d/httpd start

vim /var/www/html/index.html

~               

/etc/init.d/httpd restart

测试端:

1 vim /etc/hosts     ##域名解析###

172.25.78.1 server1 www.westos.org bbs.westos.org westos.org

[root@foundation78 iso]# curl westos.org

[root@foundation78 iso]# curl bbs.westos.org

<h1>server3</h1>

用172.25.254.78访问172.25.78.1

五 通过varnish实现负载均衡

varnish端的配置:

backend web1 {

director lb round-robin {        ###把后端聚成一个组###

{.backend = web1;}

{.backend = web2;}

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

set req.backend = lb;

return(pass);            ###为了更方便看到效果,使用该语句可以使得varnish不缓存###

set req.backend = web1;

} else {error 404 "westos cache";

server2 端的配置:

1 vim /etc/httpd/conf/httpd.conf     

NameVirtualHost *:80        ###激活虚拟主机###

<VirtualHost *:80>

    DocumentRoot /var/www/html

    ServerName server2

</VirtualHost>

    DocumentRoot /www/bbs

    ServerName bbs.westos.org

    DocumentRoot /www/westos

    ServerName www.westos.org

2 /etc/init.d/httpd restart

3 mkdir /www/bbs -p

  mkdir /www/westos    

4 vim /www/bbs/index.html

bbs.westos.org

5 vim /www/westos/index.html

server2-www.westos.com

6 /etc/init.d/httpd restart

server3的配置:

1 vim /var/www/html/index.html

<h1>server3-www.westos.org</h1>

varnish 推送:

varnish端:

acl westos {            ####访问控制列表,只有本机和172.25.38.0网段的用户可以进行varnish推送###

"127.0.0.1";            

"172.25.38.0"/24;

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

if (!client.ip ~ westos) {

error 405 "Not allowed.";

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

error 200 "ban added";

2 /etc/init.d/varnish reload 

###varnish cdn推送平台###

1 从网上下载:http://code.google.com/p/varnish-php-bansys/下载bansys.zip

2 yum install -y unzip

3 yum install -y httpd 

4 vim /etc/httpd/conf/httpd.conf

Listen 8080                ###由于推送平台和varnish是在一个主机上,而varnish使用了80端口,为了避免端口冲突,将http的端口改成8080,不然http服务不能正常开启###

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

6 mv /bansys/* /var/www/html        ###可以直接访问index.php

7 yum install php -y            ###因为是用php写的,所以要安装php####

8 vim /var/www/html/config.php 

//varnish主机列表

 //可定义多个主机列表

 $var_group1 = array(

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

                                                'port' => '80',                                 

                    );

 //varnish群组定义

 //对主机列表进行绑定

 $VAR_CLUSTER = array(

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

                     );

[root@server1 ~]# yum install -y httpd 

[root@server1 ~]# vim /etc/httpd/conf/httpd.conf

Listen 8080

[root@server1 ~]# /etc/init.d/httpd  start

[root@server1 ~]# /etc/init.d/httpd  restart

Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.38.1 for ServerName

[root@server1 ~]# cd /var/www/html/

[root@server1 html]# ls

bansys.zip

[root@server1 html]# yum install -y unzip

[root@server1 html]# unzip bansys.zip   

bansys  bansys.zip

[root@server1 html]# mv bansys.zip /root/

bansys

[root@server1 html]# cd bansys/

[root@server1 bansys]# ls

class_socket.php  config.php  index.php  purge_action.php  static

[root@server1 bansys]# mv * ..

[root@server1 bansys]# cd ..

bansys  class_socket.php  config.php  index.php  purge_action.php  static

[root@server1 html]# pwd

/var/www/html

[root@server1 html]# ll index.php 

-rw-r--r-- 1 root root 5410 Mar 24  2012 index.php

[root@server1 html]# yum install php -y

[root@server1 html]# netstat -antlp

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1122/varnishd       

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      920/sshd            

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      997/master          

tcp        0      0 127.0.0.1:6082              0.0.0.0:*                   LISTEN      1121/varnishd       

tcp        0      0 172.25.38.1:22              172.25.38.250:39506         ESTABLISHED 1060/sshd           

tcp        0      0 172.25.38.1:38869           172.25.38.250:80            TIME_WAIT   -                   

tcp        0      0 :::8080                     :::*                        LISTEN      1301/httpd          

tcp        0      0 :::80                       :::*                        LISTEN      1122/varnishd       

tcp        0      0 :::22                       :::*                        LISTEN      920/sshd            

tcp        0      0 ::1:25                      :::*                        LISTEN      997/master          

[root@server1 html]# /etc/init.d/varnish start

[root@server1 html]# vim config.php 

[root@server1 html]# rm -fr bansys/

[root@server1 html]# /etc/init.d/httpd restart

[root@server1 html]# cd /etc/varnish/

[root@server1 varnish]# vim default.vcl 

Using new config name reload_2017-07-19T09:51:49

available       2 boot

active          0 reload_2017-07-19T09:51:49

本文转自blueclo51CTO博客,原文链接: http://blog.51cto.com/12774272/1949537,如需转载请自行联系原作者