varnish入门

5 篇文章 0 订阅
2 篇文章 0 订阅

我是官方文档的搬运工,谢谢官方文档在这里

简介

Varnish是一个缓存HTTP反向代理。它接收来自客户端的请求并尝试从缓存中回答它们。如果Varnish无法应答来自缓存的请求,它会将请求转发给后端,获取响应,将其存储在缓存中并将其传递给客户端。

当Varnish准备好缓存响应时,它通常在几微秒内交付,比典型的后端服务器快两个数量级,因此您需要确保Varnish直接从缓存中尽可能多地回复请求。

如果第一次缓存中没有,会去后端中去寻找,只增加了第一次的时间,对以后访问的时间都是会缩短的。

Varnish根据从后端返回的响应决定是否可以存储内容。后端可以指示Varnish使用HTTP响应头Cache-Control缓存内容。有一些条件,Varnish不会缓存,最常见的是使用cookie。由于cookie表示客户端特定的Web对象,因此Varnish默认不会缓存它。

大多数Varnish功能的这种行为可以使用Varnish配置语言(VCL)编写的策略进行更改。

性能

varnish具有现代的解构,并以性能为出发点。通常受网络速度的约束,有效的将性能转变成非问题,能够专注于web的工作。

灵活

除了性能之外,Varnish Cache的一个关键特性是其配置语言VCL的灵活性。VCL使您可以编写有关如何处理传入请求的策略。

在这样的策略中,您可以决定要提供哪些内容,从哪里获取内容以及如何更改请求或响应。

命令

启动的一般的命令行:

./varnishd -a:6081 -T localhost:6082 -b localhost:8081

目前我安装的目录是在 /usr/local/sbin,所以需要在这个目录下进行命令的执行。

stop:

pkill varnishd

starting vanish

现在你有Varnish在运行。让我们确保它正常工作。使用浏览器转至http://127.0.0.1:6081/(将IP地址替换为运行Varnish的计算机的IP)默认配置将尝试将请求转发到与Varnish在同一台计算机上运行的Web应用程序安装了。Varnish希望Web应用程序通过端口8080上的http公开。

如果在该位置没有提供Web应用程序,Varnish将发出错误。Varnish Cache非常保守地告诉全世界出了什么问题,所以每当出现问题时,它都会发出相同的通用“错误503服务不可用”。

vcl 4.0;

backend default {
    .host = "www.varnish-cache.org";
    .port = "80";
}

现在问题让Varnish重新加载它的配置。如果成功,请在浏览器中访问http://127.0.0.1:6081/,您应该会看到一些目录列表。有用!您没有看到Varnish官方网站的原因是因为您的客户端没有在请求中发送相应的Host标头,并且它最终会在机器上显示默认Web文件夹的列表,通常提供http://www.varnish -cache.org/

but,他竟然跟我讲sorry!!!ヾ(。`Д´。)ノ彡

2018年11月23日09:50:11 继续来看varnish

配置

Varnish配置是用VCL编写的。运行Varnish时,此配置将转换为C代码,然后送入C编译器,加载并执行。

因此,与打开或关闭各种设置相反,您可以编写有关如何处理传入流量的策略。

varnishadm 

Varnish Cache有一个管理控制台。您可以通过varnishadm命令将其连接起来 。为了连接用户需要能够读取/ etc / varnish / secret以进行身份​​验证。

启动控制台后,您可以在Varnish上执行大量操作,例如停止和启动缓存进程,加载VCL,调整内置负载均衡器以及使缓存内容无效。

它有一个内置的命令“帮助”,它会给你一些关于它的功能的提示。

varnishlog

不会记录到磁盘。相反,它记录到一大块内存。它实际上是流式传输日志。在任何时候,您都可以连接到流,看看发生了什么。

varnishlog 用于记录varnish 自身定义的日志格式,varnishncsa 用于记录作类似apache/ncsa定义的日志格式 。

前者便于详细的查看varnish 缓存、接收、发送、是否命中等详细的处理过程,便于对varnish进行性能分析和故障查询;

后者便于日常的日志分析和数据挖掘。

varnishlog的自带的参数:

-a 当把日志写到文件里时,使用附加,而不是覆盖。
-b 只显示 varnishd 和后端服务器的日志。
-C 匹配正则表达式的时候,忽略大小写差异。
-c 只显示 varnishd 和客户端的日志。
-D 以进程方式运行
-d 在启动过程中处理旧的日志,一般情况下,varnishhist 只会在进程写入日志后启动。
-I regex 匹配正则表达式的日志,如果没有使用-i 或者-I,那么所有的日志都会匹配。
-i tag  匹配指定的 tag,如果没有使用-i 或者-I,那么所有的日志都会被匹配。
-k num  只显示开始的 num 个日志记录。
-n 指定 varnish 实例的名字,用来获取日志,如果没有指定,默认使用主机名。
-o 以请求 ID 给日志分组,这个功能没多大用。如果要写到一个文件里使用 -w 选项。
-P file 记录 PID 号的文件
-r file 从一个文件读取日志,而不是从共享内存读取。
-s sum  跳过开始的 num 条日志。
-u 无缓冲的输出。
-V  显示版本,然后退出。
-w file 把日志写到一个文件里代替显示他们,如果不是用-a 参数就会发生覆盖,如果 varnishlog 在写日志时,接收到一个 SIGHUP 信号,他会创建一个新的文件,老的文件可以移走。
-X regex 排除匹配正则表达式的日志。
-x tag  排除匹配 tag 的日志。
如果-o 选项被指定,需要使用正则表达式和tag 来制定需要的日志。 

栗子:

#下面的命令简单的打印日志到一个文件:
varnishlog -w /var/log/varnish.log
#下面这条命令读取一个日志文件,然后显示请求的首页:
varnishlog -r /var/log/varnish.log -c -o RxURL '^/$' 

三个主要的文档:

varnish教程/用户指南/参考手册

启动和运行Varnish是关于如何配置Varnish,包括存储,套接字,安全性以及如何在Varnish运行时控制和通信。

VCL - Varnish配置语言是让Varnish以您想要的方式处理HTTP请求,缓存内容,如何缓存它,修改HTTP头等。

varnishd 程序中的两个过程,一个是manager,另外一个是worker。

当你启动varnishd时,你启动管理器进程,一旦完成处理所有命令行标志,它将为你启动子进程。如果孩子处理过程中死亡,经理会立即为您自动启动它。

CLI几乎可以完全控制Varnish对您的HTTP流量实际执行的操作,并且我们已经竭尽全力确保您不需要重新启动Varnish流程,除非您需要更改非常基础的内容。

子进程应该如何处理HTTP请求,缓存什么,要删除哪些头等等都是使用一种名为VCL的小编程语言来指定的。管理器进程将编译VCL程序并检查它是否有错误。

VCL代码可以使用外部模块扩展,称为VMOD,甚至可以通过内联C代码扩展,如果你是勇敢的,那么就Varnish可以为你的HTTP流量做什么而言,实际上没有限制。

Varnish使用一段共享内存来报告和记录其活动和状态。对于每个HTTP请求,许多非常详细的记录将附加到日志内存段。其他进程可以订阅日志记录,过滤它们并格式化它们,例如Apache / NCSA样式的日志记录。

Next Topic

安全

varnish的安全主要和四个部分有关系,大致与控制varnish的方式和位置有关:

  • 命令行参数
  • cli界面
  • VCL程序
  • HTTP请求

顶级的安全策略决定和定义当varnish以命令行的参数形式启动的时候。我们使用此策略为了让他们随后的操作不受影响。

几个重要的决定:

  1. 谁应该有权访问命令行界面?
  2. 它们可以改变哪些参数?
  3. 是否允许内联-C代码?
  4. 是否/如何限制VMOD?
  5. 子进程将如何被判入狱?

CLI界面访问:

可以告诉varnishd在TCP套接字上侦听并提供CLI连接。您可以将套接字绑定到内核将接受的几乎任何内容:

-T 127.0.0.1:631
-T localhost:9999
-T 192.168.1.1:34
-T '[fe80::1]:8082'

默认情况下随机选择一个端口号,varnishadm,可以共享内存中学习。

使用localhost地址能够限制对本地计算机的CLI访问。

也能够配置varnishd作为反向代理模式,在情况下,varnishd将尝试打开TCP的链接,并启动与varnishd的链接。

这情况下是没有加密的,但仍旧在远端需要验证-S/PSK

最后如果启动varnishd -d,你能够在stdin/stdout得到一个CLI命令,但既然你启动了进程,就以为这需要进到CLI,人性化吧~

(官方文档大致是这个意思,炫出了优越感,(づ ̄3 ̄)づ╭❤~)

CLI 接口认证

默认情况下CLI接口被简单粗暴的“预共享秘钥”认证方法保护着,不提供保密,即:cli命令和响应未加密。

-S/PSK非常的简单,在启动期间,创建一个随机内容的启动文件,该文件只能被启动varnishd的人或超级用户访问。

要进行身份验证和使用CLI的链接,需要知道文件内容,目的是回到加密质询varnishd问题。

varnishadm使用这些来限制访问,只有他可以读取秘密文件,它才会起作用。

如果你想允许其他的用户,本地,远程能够访问CLI,就需要创建自己的秘钥文件,并确保能被用户们读取到。

创建私密文件的好方式:

dd if=/dev/random of=/etc/varnish_secret count=1

当启动varnishd时,你用-S指定文件名,并且不用说varnisd主进程也需要能够读取文件。

你能在varnisd运行的时候改变秘密文件的内容,每次链接CLI都需要验证。

在本地的系统上,varnishd可能在共享内存中签名文件名,但是在远程系统上需要-S参数为varnishadm提供秘密文件的副本。

如果禁用-S/PSK验证,varnishd空参数指定。

varnishd [...] -S "" [...]

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值