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 p_w_picpaths]# 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 p_w_picpaths]# 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 p_w_picpaths]# 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


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




二 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

内容:

server2


~                  

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:
[root@server2 ~]# /etc/init.d/httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.78.2 for ServerName
                                                           [  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        ###缓存命中,说明缓存中有###

[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:07 GMT
X-Varnish: 1793081649
Age: 0                    
Via: 1.1 varnish
Connection: keep-alive
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

server2


[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

[root@server1 varnish]#

###访问端###

[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:30:34 GMT
X-Varnish: 1793081653
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Cache: MISS from westos cache


[root@foundation78 iso]# curl -I www.westos.org
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:32:27 GMT
X-Varnish: 1793081654
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Cache: MISS from westos cache


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

1 vim /etc/varnish/default.vcl

内容如下:

backend web1 {                ###web1只是一个别名###
  .host = "172.25.78.2";
  .port = "80";
}

backend web2 {
  .host = "172.25.78.3";
  .port = "80";
}

###该语句块是所有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

内容:

server2


~               

/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]# vim /etc/hosts
[root@foundation78 iso]# curl www.westos.org

server2


[root@foundation78 iso]# curl westos.org

server2


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

server3




用172.25.254.78访问172.25.78.1


 

五 通过varnish实现负载均衡

varnish端的配置:
1 vim /etc/varnish/default.vcl
backend web1 {
  .host = "172.25.78.2";
  .port = "80";
}

backend web2 {
  .host = "172.25.78.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);            ###为了更方便看到效果,使用该语句可以使得varnish不缓存###
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web1;
} else {error 404 "westos cache";
}
}


2 /etc/init.d/varnish reload


server2 端的配置:
1 vim /etc/httpd/conf/httpd.conf     
NameVirtualHost *:80        ###激活虚拟主机###

    DocumentRoot /var/www/html
    ServerName server2


    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
内容:

server3-www.westos.org


2 /etc/init.d/httpd restart

测试:

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

server3-www.westos.org


[root@foundation78 iso]# curl www.westos.org
server2-www.westos.com
[root@foundation78 iso]# curl bbs.westos.org
bbs.westos.org





varnish 推送:


varnish端:
1 vim /etc/varnish/default.vcl

内容:
acl westos {            ####访问控制列表,只有本机和172.25.38.0网段的用户可以进行varnish推送###
"127.0.0.1";            
"172.25.38.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";
}
}


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
Starting httpd:
[root@server1 ~]# /etc/init.d/httpd  restart
Stopping httpd:                                            [  OK  ]
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.38.1 for ServerName
                                                           [  OK  ]
[root@server1 ~]# cd /var/www/html/
[root@server1 html]# ls
bansys.zip
[root@server1 html]# yum install -y unzip
[root@server1 html]# ls
bansys.zip
[root@server1 html]# unzip bansys.zip   
[root@server1 html]# ls
bansys  bansys.zip
[root@server1 html]# mv bansys.zip /root/
[root@server1 html]# ls
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]# ls
[root@server1 bansys]# cd ..
[root@server1 html]# ls
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]# ls
bansys  class_socket.php  config.php  index.php  purge_action.php  static
[root@server1 html]# rm -fr bansys/
[root@server1 html]# ll index.php
-rw-r--r-- 1 root root 5410 Mar 24  2012 index.php
[root@server1 html]# /etc/init.d/httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.38.1 for ServerName
                                                           [  OK  ]
[root@server1 html]# cd /etc/varnish/
[root@server1 varnish]# vim default.vcl
[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-19T09:51:49
VCL compiled.

available       2 boot
active          0 reload_2017-07-19T09:51:49

Done