这篇文章包括四个小节
1、后端服务器
2、启动varnish
3、记录数据
4、使varnish工作在80端口
 
 
二、varnish指南
         Varnish是一个web加速器,被安装在web应用程序前面,缓存web应用程序,并响应用户请求,varnish让您的web应用程序运行的更快,并且varnish灵活好用。
         这个指南没有覆盖所有的varnish函数和功能,它可以让您对varnish有个全面的认识并且掌握如何运用它。
         我们假设您有一个web服务器和web应用程序正在运行,而且您想使用varnish给您的web运行程序加速。
         此外我们还假设您已经阅读了“varnish安装”并且按照默认配置安装了varnish
         Backend servers(后端服务器)
                   varnish有一个概念叫做“后端服务器”或者叫“原点服务器”,一个后端服务器将提供varnish加速的内容。
                   我们的第一个任务就是告诉varnish在哪里可以找到他要的内容。使用您喜欢的文本编辑器打开varnish默认的配置文件,如果您是源码安装的配置文件可能在/usr/local/etc/varnish/default.vcl,如果您是二进制包安装的配置文件可能在/etc/varnish/default.vcl.
              配置文件的最顶端如下:
# backend default {
#     .host = "127.0.0.1";
#     .port = "8080";
# }
                   我们取消前面的注释,并且把8080端口改成80端口。如下
                   backend default {
         .host = "127.0.0.1";
         .port = "80";
}
现在,这块配置定义了一个varnish默认访问的后端服务器,当varnish需要从后端服务器获取内容的时候,它就会访问自己(127.0.0.1)的80端口。
Varnish可以定义多个后端服务器而且您可以通过定义多个后端服务器达到负载均衡的目的。
现在我们完成了基本的varnish配置,我们可以在8080端口上启动varnish,并做一些基本的测试。
 
         Starting Varnish(启动varnish
         假设varnishd在您的环境变量中,您可能需要运行pkill varnishd确定varnish没有运行。然后使用root执行下面的命令。
         varnishd  -f /usr/local/etc/varnish/default.vcl  -s malloc,1G -T 127.0.0.1:2000 -a 0.0.0.0:8080
         我添加了一些选项,现在来详细分析他们:
         -f /usr/local/etc/varnish/default.vcl
         这个 –f 选项指定varnishd使用哪个配置文件。
         -s malloc1G
         这个 –s 选项用来确定varnish使用的存储类型和存储容量,我使用的是malloc类型(malloc是一个C函数,用于分配内存空间), 1G 定义多少内存被malloced1G = 1gigabyte
         -T 127.0.0.12000
         Varnish有一个基于文本的管理接口,启动它的话可以在不停止varnish的情况下来管理varnish。您可以指定管理软件监听哪个接口。当然您不能让全世界的人都能访问您的varnish管理接口,因为他们可以很轻松的通过访问varnish管理接口来获得您的root访问权限。我推荐只让它监听本机端口。如果您的系统里有您不完全信任的用户,您可以通过防火墙规则来限制他访问varnish的管理端口。
         -a 0.0.0.08080
         这一句的意思是制定varnish监听所有IP发给8080端口的http请求,如果在生产环境下,您应该让varnish监听80,这也是默认的。
现在您的varnish已经在运行了,现在我们来验证它是否工作正常,在留言其中输入http://192.168.2.2:8080/ ,您应该可以看见您的web程序在这里运行。
使用varnish后,web应用程序是否加速,取决于一些原因。如果您的程序的每个会话都使用cookies或者您每个程序都需要三次握手认证,这样varnish就不能缓存更多的数据,我们暂时忽略这个问题,等到“提高缓存命中率”这节的时候我们再继续讨论这个问题。
想要知道varnish对您的网站做了什么,请查看logs
Logging in varnish(记录数据)
                   Varnish一个真正的特点就是它如何记录数据的。使用内存段代替普通的日志文件,当内存段使用完以后,又从头开始,覆盖最旧的记录。这样就可以非常快的记录数据,,并且不需要磁盘空间。
                   缺点就是您没有把数据写到磁盘上,可能会消失。(varnish也支持将数据写到硬盘的文件上,看您如何选择)
                   Varnishlog这个程序可以查看varnish记录了哪些数据。Varnishlog给您生成原始的日志,包括所有的事件。我一会给您演示。
              在运行了varnish的终端窗口上,运行varnishlog这个命令。
              您可以看见如下显示
0 CLI          - Rd ping
0 CLI          - Wr 200 PONG 1277172542 1.0
这是检查varnish的主进程是否正常,如果看见这就说明一切OK
              现在您去浏览器通过varnish重新访问您的web程序,您将看到如下信息:
11 SessionOpen  c 127.0.0.1 58912 0.0.0.0:8080
11 ReqStart     c 127.0.0.1 58912 595005213
11 RxRequest    c GET
11 RxURL        c /
11 RxProtocol   c HTTP/1.1
11 RxHeader     c Host: localhost:8080
11 RxHeader     c Connection: keep-alive
第一列是任意的数,它用来定义请求,相同的号码代表相同的HTTP传输。
第二列是信息标记,所有的日志都带有一个标记(tag),标记对应相对的操作。Rx表示varnish收到数据,Tx表示varnish发送数据。
第三列代表数据是从哪里传出或者传入的,是从cclient)还是bbackend)。
第四列是被记录的数据。
 
现在,您可以过滤掉相当多的varnishlog,这些基本的选项,您需要知道:
-b               \\只显示varnishbackend server之间的日志,当您想要优化命中率的时候可以使用这个参数。
-c               \\-b差不多,不过它代表的是varnishclient端的通信。
-i tag         \\只显示某个tag,比如“varnishlog –i SessionOpen”将只显示新会话,注意,这个地方的tag名字是不区分大小写的。
-I                \\通过正则表达式过滤数据,比如“varnishlog -c -i RxHeader -I Cookie”将显示所有接到到来自客户端的包含Cookie单词的头信息。
-o               \\聚合日志请求ID
         如果varnish一切运行OK,我们就可以把它调整到80端口上。
PutVarnish on port 80(使varnish工作在80端口上)
                  如果您的程序正常运行,没有问题,我们就可以把varnish调整到80端口运行。先关闭vernish
                   pkill varnishd
                   然后停止您的web服务器,修改web服务器配置,把web服务器修改成监听8080端口,然后修改varnishdefault.vcl和改变默认的后端服务器端口为8080.
                   先启动您的web服务器,然后在启动varnish
                   varnishd  -f /usr/local/etc/varnish/default.vcl  -s malloc,1G -T 127.0.0.1:2000
                   我们取消了-a 选项,这样varnish将监控默认端口,启动后,检查您的web程序是否正常。