Varnish 导览

2016-07-19  本文已影响235人  C86guli

编译自(有时会添加自己的话,可能不会明显标记出来):
https://www.varnish-cache.org/docs/4.0/tutorial/index.html

本文档包含基本的主题:Varnish 是什么,Varnish 是怎么工作的。

目录:

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。

上一篇下一篇

猜你喜欢

热点阅读