编译自(有时会添加自己的话,可能不会明显标记出来):
https://www.varnish-cache.org/docs/4.0/tutorial/index.html
本文档包含基本的主题:Varnish 是什么,Varnish 是怎么工作的。
目录:
- Varnish 缓存代理的基本原理
- 支持的平台
- Varnish 开发进度
- Getting in touch
- 启动 Varnish
- 让 Varnish 监听在 80 端口
- 后端服务器
- 特性
- Now what
Varnish 缓存代理的基本原理
Varnish 是一个 HTTP 缓存代理,它从 client 接受请求,并尝试从缓存中响应请求。如果无法从缓存中提供响应,Varnish 向后端服务器发起请求,获取响应,将响应存储在缓存中,然后把响应发送给 client。
如果 Varnish 能够从 Cache 中响应一个请求,所消耗的时间是微秒级别的,这个响应速度比直接从 HTTP 服务器响应请求的速度要快两个数量级,所以缓存命中率越高,网站的访问速度就越快。
根据从后端服务器获取的 HTTP 响应,Varnish 会决定是否对其进行缓存。后端服务器可以使用 response header Cache-Control 主动告诉 Varnish 缓存这个响应。有几种情况 Varnish 是不缓存响应的,最典型的情况,是 HTTP 响应中使用了 cookies,因为 cookie 是关于某个特定用户的,所以缓存意义不大,Varnish 默认不缓存这样的响应。
使用 Varnish 配置语言 - Varnish Configuration Language (VCL),可对 Varnish 的行为和功能进行配置,详细的介绍参考 Varnish Users Guide。
性能
Varnish 拥有现代的架构,设计时着眼于性能。性能通常只与网络的速度相关,有效的性能调优不是很重要。你可将注意力放在配置 web 的工作上,对于性能和可扩展性则不需要太关心。
灵活性
Varnish 除了其优秀的性能,另一个最大的特性是其配置语言的灵活性。使用 VCL 写的规则,让你可以对入站的请求进行控制。比如,选择提供什么样的内容服务,从哪里获取内容,请求和响应将被如何修改。
支持的平台
Varnish 支持 Linux 和 FreeBSD 以及 OS X 等其他操作系统。
Varnish 开发进度
Varnish 是一个社区驱动的项目..
Getting in touch
联系方式..
启动 Varnish
本小节适用于: Ubuntu, Debian, Red Hat Enterprise Linux or CentOS.
安装好 Varnish 之后,启动 Varnish:service varnish start
。
现在 Varnish 已经启动了。我们来确认一下,使用浏览器访问 http://127.0.0.1:6081/,注意将 IP 地址替换为你的运行 Varnish 的机器的 IP地址。根据默认的配置,Varnish 会尝试将请求转发到一个 web 应用,默认转发给本机的 8080 端口:http://127.0.0.1:8080。
如果没有 web 应用在 http://127.0.0.1:8080 运行,Varnish 会返回一个错误。Varnish 对于返回错误信息总是很谨慎的,不管是什么错误,Varnish 总是返回 "Error 503 Service Unavailable"。
可能你的 web 应用跑在其他地址上,让我们修改配置文件,指向这些 web 应用。
使用你最喜欢的编辑器打开 /etc/varnish/default.vcl
文件。其中多数被注释了,其中可能有如下内容:
vcl 4.0;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
我们可以修改它,使其指向你的 web 服务器。我们这里使用 http://www.varnish-cache.org/:
vcl 4.0;
backend default {
.host = "varnish-cache.org";
.port = "80";
}
现在执行 service varnish reload
重新加载配置文件,如果成功了,使用浏览器访问 http://127.0.0.1:6081/,(记得替换IP地址),你会看见一个目录列表。为什么是看到目录列表呢,因为你的 client 没有发送适当的 Host header,所以显示默认的 webfolder。
让 Varnish 监听在 80 端口
现在我们的 Varnish 监听于 6081 端口,这个端口用于调试是不错的。我们现在让 Varnish 监听在 HTTP 的默认端口: 80 端口。
首先关闭 Varnish:service varnish stop
现在我们需要编辑启动 Varnish 的配置文件:
Debian/Ubuntu
On Debian/Ubuntu this is /etc/default/varnish. In the file you'll find some text that looks like this:
DAEMON_OPTS="-a :6081
-T localhost:6082
-f /etc/varnish/default.vcl
-S /etc/varnish/secret
-s malloc,256m"
Change it to:
DAEMON_OPTS="-a :80
-T localhost:6082
-f /etc/varnish/default.vcl
-S /etc/varnish/secret
-s malloc,256m"
Red Hat Enterprise Linux / CentOS
在 RHEL/CentOS 上,配置文件是 /etc/sysconfig/varnish,除了上面这种配置,另外还有一种参数配置的方法:
#VARNISH_LISTEN_ADDRESS=
VARNISH_LISTEN_PORT=80
不指定 VARNISH_LISTEN_ADDRESS,表示监听本地所有地址。这些参数会被引用:
DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
-f ${VARNISH_VCL_CONF} \
-T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
-t ${VARNISH_TTL} \
-p thread_pool_min=${VARNISH_MIN_THREADS} \
-p thread_pool_max=${VARNISH_MAX_THREADS} \
-p thread_pool_timeout=${VARNISH_THREAD_TIMEOUT} \
-u varnish -g varnish \
-S ${VARNISH_SECRET_FILE} \
-s ${VARNISH_STORAGE}"
重启 Varnish: service varnish start
现在 Varnish 就会监听在 80 端口了。
现在所有对你的站点的访问,都会经过 Varnish 的处理。
后端服务器
在 Varnish 中有 backend servers 或者 origin servers 的概念,可称之为后端 web 服务器。后端 web 服务器通过 Varnish 的缓存功能对访问进行加速。
我们来编辑配置文件,如果是编译安装,路径为 /usr/local/etc/varnish/default.vcl
,如果是软件包安装,路径为 /etc/varnish/default.vcl
。
刚才我们已经编辑过:
vcl 4.0;
backend default {
.host = "www.varnish-cache.org";
.port = "80";
}
这表示 Varnish 为 http://www.varnish-cache.org:80 做缓存代理。
现在配置 Varnish 为自己的 web 应用的缓存代理。刚才我们已经配置 Varnish 监听于 80 端口,现在配置后端服务器地址:
vcl 4.0;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
Varnish 可定义多个后端服务器,并且可以联合多个后端服务器为一个后端集群,进行负载均衡。
下面我们看看 Varnish 的特别之处,以及如何利用这些特性。
特性
Varnish 跟其他程序相比有一些特别的特性,其中一个我们已经介绍过 - VCL。下面我们将快速过一下其他重要的特性:
Configuration
Varnish 的配置使用 VCL 编写。Varnish 启动时,其配置被转换为 C 代码,然后交给 C 编译器编译,然后被加载和执行。
所以,与其他程序的配置不同,Varnish 的配置不是打开或关闭某些选项,而是使用 VCL 编写对入站访问流量的处理策略。
varnishadm
Varnish 拥有一个 admin console,你可以通过 varnishadm 命令连接该 console。为了进行连接认证,执行 varnishadm 命令的用户必须对 /etc/varnish/secret
文件有可读权限。
一旦启动了 console,你可对 Varnish 做一些操作。比如:启动或关闭 cache 进程,加载 VCL,调整负载均衡策略,调整失效的缓存内容。
通过内置命令 help,可获取操作的帮助。
varnishlog
Varnish 的日志不会存入磁盘,而是存入一块内存空间中。Varnish 的日志被“流式化”。任何时候,你都可以连接到日志流,查看正在发生什么。Varnish 日志会记录很多信息,可以通过 varnishlog 命令查看日志流。
Now what
本文档的介绍到此结束,下面我们可以学习 Varnish Users Guide。