Varnish 导览

编译自(有时会添加自己的话,可能不会明显标记出来):
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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容

  • 缓存的基础知识 1、程序本身具有局部性 时间局部性过去访问到的数据,也有可能被两次访问 空间局部性一个数据被访问到...
    魏镇坪阅读 2,030评论 1 3
  • 本文编译自:users-guide 本节讲述如何使用 VCL 编写处理 HTTP 流量的策略。 Varnish 的...
    C86guli阅读 3,186评论 0 1
  • 1.介绍 运维日常: 2.Web Page Cache: varnish2.0,3.0处理过程 varnish4....
    尛尛大尹阅读 3,363评论 0 0
  • 华盛顿最大的旅游资源就是大大小小、各式各样的免费博物馆。因为一般的博物馆都是每天早上10:00开门,每天出行的时间...
    LilyRen阅读 419评论 0 0
  • 最近在看一部小说,不明白为何女主和男二都准备在一起结婚了,但后来还是分开了,因为不合适。这个不合适,不是因为作者的...
    雍雍吶阅读 211评论 0 0