使用Varnish加速Web

1.1 问题


通过配置Varnish缓存服务器,实现如下目标:


    使用Varnish加速后端Apache Web服务

    使用varnishadm命令管理缓存页面

    使用varnishstat命令查看Varnish状态


1.2 方案


通过源码编译安装Varnish缓存服务器


    编译安装Varnish软件

    复制启动脚本与配置文件


修改配置文件,缓存代理源Web服务器,实现Web加速功能


使用3台RHEL7虚拟机,其中一台作为Web服务器(192.168.2.100)、一台作为Varnish代理服务器(192.168.4.5,192.168.2.5),另外一台作为测试用的Linux客户机(192.168.2.100)对于Web服务器的部署,此实验中仅需要安装httpd软件、启动服务,并生成测试首页文件即可,默认httpd网站根路径为/var/www/html,首页文档名称为index.html


1.3 步骤


实现此案例需要按照如下步骤进行。


步骤一:构建Web服务器


1)使用yum安装web软件包


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


2)启用httpd服务,并设为开机自动运行


    [root@web ~]# systemctl start httpd  ;  systemctl enable httpd


httpd服务默认通过TCP 80端口监听客户端请求:


    [root@web ~]# netstat  -anptu  |  grep httpd

    tcp        0        0        :::80        :::*        LISTEN        2813/httpd

3)为Web访问建立测试文件


在网站根目录/var/www/html下创建一个名为index.html的首页文件

[root@web ~]# echo "这是Varnish的测试页面..A.." > /var/www/html/index.html

步骤二:部署Varnish缓存服务器


1)编译安装软件


    [root@Proxy ~]# yum -y install gcc readline-devel pcre-devel    //安装软件依赖包

    [root@Proxy ~]# useradd -s /sbin/nologin varnish                //创建账户

    [root@Proxy ~]# tar -xzf varnish-3.0.6.tar.gz

    [root@Proxy ~]# cd varnish-3.0.6

    [root@Proxy varnish-3.0.6]# ./configure --prefix=/usr/local/varnish

    [root@Proxy varnish-3.0.6]# make && make install


2)复制启动脚本及配置文件


    [root@Proxy varnish-3.0.6]# cp redhat/varnish.initrc /etc/init.d/varnish

    [root@Proxy varnish-3.0.6]# cp redhat/varnish.sysconfig /etc/sysconfig/varnish

    [root@Proxy varnish-3.0.6]# ln -s /usr/local/varnish/sbin/varnishd /usr/sbin/

    [root@Proxy varnish-3.0.6]# ln -s /usr/local/varnish/bin/* /usr/bin/


3)修改Varnish文件


    [root@Proxy ~]# vim /etc/sysconfig/varnish

    66行:VARNISH_LISTEN_PORT=80                                #默认端口

    89行:VARNISH_STORAGE_SIZE=60M                                #定义缓存大小

    92行:VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}"        #基于内存方式缓存

4)修改代理配置文件


    [root@Proxy ~]# mkdir /etc/varnish

    [root@Proxy ~]# cp /usr/local/varnish/etc/default.vcl /etc/varnish/

    [root@Proxy~]# uuidgen > /etc/varnish/secret

    [root@Proxy ~]# vim  /etc/varnish/default.vcl

    backend default {

         .host = "192.168.2.100"; //改成口端服务器的IP

         .port = "80";    //改称80端口

     }

    [root@Proxy varnish-3.0.6]# /etc/init.d/varnish 

Usage: /etc/init.d/varnish {start|stop|status|restart|condrestart|try-restart|reload|force-reload} //是一个自带的脚本,启服务..等用这个脚本就可以啦


步骤三:客户端测试


1)客户端开启浏览器访问


    [root@client ~]# curl http://192.168.4.5


步骤四:相关技术点


1)查看varnish日志


    [root@Proxy ~]# varnishlog                    //varnish日志

    [root@Proxy ~]# varnishncsa                    //访问日志


2)更新缓存数据,在后台web服务器更新页面内容后,用户访问代理服务器看到的还是之前的数据,说明缓存中的数据过期了需要更新(默认也会自动更新,但非实时更新)。


    [root@Proxy ~]# varnishadm –S /etc/varnish/secret –T 127.0.0.1:6082 

会进到一个这样的页面

200        

-----------------------------

Varnish Cache CLI 1.0

-----------------------------

Linux,3.10.0-327.el7.x86_64,x86_64,-smalloc,-smalloc,-hcritbit

varnish-3.0.6 revision 1899836


Type 'help' for command list.

Type 'quit' to close CLI session.


varnish> ban.url 页面文件名  


ban.url 页面文件名

    //清空缓存数据,支持正则表达式