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
这个
�Cf
选项指定
varnishd
使用哪个配置文件。
-s malloc
,
1G
这个
�Cs
选项用来确定
varnish
使用的存储类型和存储容量,我使用的是
malloc
类型(
malloc
是一个
C
函数,用于分配内存空间),
1G
定义多少内存被
malloced
,
1G = 1gigabyte
。
-T 127.0.0.1
:
2000
Varnish
有一个基于文本的管理接口,启动它的话可以在不停止
varnish
的情况下来管理
varnish
。您可以指定管理软件监听哪个接口。当然您不能让全世界的人都能访问您的
varnish
管理接口,因为他们可以很轻松的通过访问
varnish
管理接口来获得您的
root
访问权限。我推荐只让它监听本机端口。如果您的系统里有您不完全信任的用户,您可以通过防火墙规则来限制他访问
varnish
的管理端口。
-a 0.0.0.0
:
8080
这一句的意思是制定
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
发送数据。
第三列代表数据是从哪里传出或者传入的,是从
c
(
client
)还是
b
(
backend
)。
第四列是被记录的数据。
现在,您可以过滤掉相当多的
varnishlog
,这些基本的选项,您需要知道:
-b \\
只显示
varnish
和
backend server
之间的日志,当您想要优化命中率的时候可以使用这个参数。
-c \\
和
-b
差不多,不过它代表的是
varnish
和
client
端的通信。
-i tag \\
只显示某个
tag
,比如“
varnishlog �Ci 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
端口,然后修改
varnish
的
default.vcl
和改变默认的后端服务器端口为
8080.
先启动您的
web
服务器,然后在启动
varnish
:
varnishd -f /usr/local/etc/varnish/default.vcl -s malloc,1G -T 127.0.0.1:2000
我们取消了
-a
选项,这样
varnish
将监控默认端口,启动后,检查您的
web
程序是否正常。