安装Varnish
以下操作系统支持varnish
-
Linux
-
FreeBSD
-
Solaris
支持的Linux发行版有:
-
Ubuntu
-
Debian
-
Red Hat
-
CentOS
可以使用包管理器安装Varnish
下面是可以根据操作系统使用的包管理器列表:
-
APT on Ubuntu and Debian
-
YUM on Red Hat and CentOS
-
PKG on FreeBSD
在Red Hat或者CentOS上安装Varnish
红帽操作系统有三个主要的发行版:
-
红帽企业版:付费企业版
-
CentOS:免费版
-
Fedora:最新的桌面版本
它们三个都有YUM包管理器,安装过程相同。
如果你使用Red Hat或者CentOS7,可以跟随以下步骤安装Varnish:
yum install epel-release
rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.1.el7.rpm
yum install varnish
如果你使用Red Hat或者CentOS6,可以跟随以下步骤安装Varnish:
yum install epel-release
rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.1.el6.rpm
yum install varnish
配置Varnish
Varnish拥有许多启动设置,可以让你配置与它交互的方式。这些设置位于配置文件中,并在启动时分配给varnishd程序。以下是一些典型的启动设置的例子:
-
Varnish处理传入的HTTP请求的地址和端口
-
Varnish CLI运行的地址和端口
-
保存缓存策略的VCL文件的位置
-
保存密钥的文件的位置,用于Varnish CLI进行身份验证
-
存储后端类型和存储后端大小
-
锁定设置保护Varnish
-
将与Varnish交互的后端地址和端口
配置文件
假如你通过包管理器安装了Varnish,那么配置文件将位于以下位置:
如果你改变了配置文件内容,那么需要重新加载配置:
sudo service varnish reload
启动设置
现在你已经知道配置文件的唯一目的是将启动设置提供给varnishd程序。理论上你不需要服务管理器:你可以通过运行varnishd来手动的设置参数并启动Varnish。
用法:varnishd [选项]
-a address[:port][,proto] #http监听地址和端口(默认80)
#address: 默认为换回地址(loopback)
#port: 端口或服务 (默认80)
#proto: HTTP1.0 (默认)
-b address[:port] #backend: 地址和端口
#address: hostname或者IP
#port: 端口或服务 (默认80)
-C #编译VCL代码为C语言
-d #debug
-F #在前端运行
-f file #VCL脚本
-h kind[,hashoptions] # Hash specification
# -h critbit [default]
# -h simple_list
# -h classic
# -h classic,<buckets>
-i identity # varnish示例标识
-j jail[,jailoptions] # jail specification
# -j unix[,user=<user>][,ccgroup=<group>]
# -j none
-l vsl[,vsm] # 共享内存文件大小
# vsl: space for VSL records [80m]
# vsm: space for stats counters [1m]
-M address:port # Reverse CLI destination
-n dir # varnishd working directory
-p file # PID file
-P param[,param...] # 使参数只读
-S secret-file # CLI身份认证用的密钥文件
-s [name=]kind[,options] # 后端存储规范
# -s malloc[,<size>]
# -s file,<dir_or_file>
# -s file,<dir_or_file>,<size>
# -s file,<dir_or_file>,<size>,<granularity>
# -s persistent (experimental)
-T address:port # Telnet 监听地址和端口
-t TTL # 缺省值 TTL
-V # 版本
-W waiter # Waiter implementation
# W epoll
# -W poll
varnishd文档页面有关于启动参数更详细的信息。
常见启动参数
DAEMON_OPTS="-a :80
-a :81,PROXY
-T localhost:6082
-f /etc/varnish/default.vcl
-S /etc/varnish/secret
-s malloc,3g
-j unix,user=www-data "
Network binding
最重要的网络选项是-a选项。它定义用于连接Varnish的地址、端口和协议。默认情况下,它的值是:6081。这意味着Varnish将被绑定到TCP端口6081上所有可用的网络接口。你可以决定使用哪个协议,默认是HTTP协议。你也可以通过使用多个-a选项来定义多个侦听地址。
CLI地址绑定
-T选项用于定义Varnish CLI侦听的地址和端口。默认Varnish CLI绑定到localhost端口6082上,这意味着CLI只能本地使用。
安全选项
-j选项允许你锁定varnish实例,并在指定的用户下运行子进程。默认情况下,所有进程都将使用varnish用户运行。如果您在一台服务器上运行多个Varnish实例,那么这个选项尤其有用。这样,实例之间就有了更好的进程隔离。
-S选项用来定义密钥文件的位置。这个密钥是Varnish CLI身份验证用的,默认位于/etc/varnish/secret。
存储选项
-s 选项决定缓存中的文件存在哪,默认存在内存中,缓存大小为256MiB。如果Varnish实例耗光了内存,它会应用最近最少使用(LRU)策略来从缓存中移除项目。varnish会计算每个缓存对象命中的次数,当由于内存不足不得不移除对象的时候,就会移除最少使用的对象,直到有足够的空间来存储下一个被请求的对象。
如果你有个专用的Varnish服务器,建议你分配80%的可用内存给Varnish。

VCL文件位置
用-f选项指定VCL文件路径,默认在/etc/varnish/default.vcl。
更高级的配置
DAEMON_OPTS="-a :80
-a :81,PROXY
-T localhost:6082
-f /etc/varnish/default.vcl
-S /etc/varnish/secret
-s malloc,3g
-j unix,user=www-data
-l 100m,10m
-t 60
-p feature=_++esi_disable_xml_check
-p connect_timeout=5
-p first_byte_timeout=10
-p between_bytes_timeout=2"
共享日志内存存储
Varnish也分配了一些内存用于日志和统计,这些信息被像varnishlog、varnishtop和varnishstat这样的实用二进制文件所使用。默认会分配1MiB的给Varnish统计计数器(VSC),会分配81MiB给Varnish共享内存日志(VSL),你可以用-l选项来改变它们的值。
默认的Time-to-live
Varnish依赖于expires或cache-control头部字段来确定对象的生存时间。如果没有这些头部字段,并且VCL文件立也没有指定TTL,那么Varnish会默认time-to-live时间为120秒。你可以用-t选项改变这个值。
运行时参数
可以用-P选项来覆盖运行时参数,或者你可以使用-r选项来使这些参数变成只读,这样可以限制用户使用Varnish CLI访问在运行时覆盖它们。
在之前的例子里,我们设置了这些运行时参数:
- feature=esi_disable_xml_check
- connect_timeout
- first_byte_timeout
- between_bytes_timeout
第一个参数用来在Edge Side Includes(ESI)处理时禁止XML检查。Varnish使用ESI这个技术来组装内容块来自多个url的页面。
第二个参数被设置为5秒,意味着Varnish在连接到后端时会等待5秒,如果超时会返回错误,默认是3.5秒。
第三个参数被设置为10秒,在与后端建立连接后,Varnish会等待10秒,直到第一个字节从后端返回。如果超时会报错,默认是60秒。
第四个参数被设置为2秒,如果Varnish在两个字节中等待了超过2秒,会报错,默认是60秒。
关于TLS/SSL
传输层安全(TLS),也被称为安全套接字层(SSL),是一组加密协议用来加密网络上的数据通信。在Web环境中,TLS和SSL就是HTTPS中的S。TLS通过加密通信和通过颁发证书建立信任级别来确保连接安全,HTTPS正变得越来越流行。Varnish本身并不支持TLS,他的核心业务是缓存。
在varnish上使用TLS的技巧是,在当通信到达Varnish时中断安全连接。这意味着添加一个TLS/SSL卸载器到你的设置,用来中止TLS连接并使用HTTP与Varnish通信。
缺点是这会添加额外一层复杂度,并可能出问题。此外,对于Web服务器确认原始ip地址有点困难。在正常情况下,Varnish会添加由TLS卸载器发送的HTTP请求头的X-Forwarded-for值,并将该值存储在它自己的X-Forwarded-For头部中。
在Varnish4.1中,添加了PROXY协议。PROXY协议是由HAProxy引入的一种小型协议,这是一个领先的开源负载均衡软件。这个PROXY协议向TCP连接添加了一个前导码(preamble)包含原始客户端的IP地址。这个信息被传递下去,并被Varnish理解。Varnish会自动将这个值添加到X-Forwarded-For头部字段并发送到后端。
此外,Varnish中的PROXY协议实现会使用这个新的原始IP信息在VCL中设置几个变量:
- 它设置client.ip变量为通过PROXY协议发送的IP地址
- 它设置server.ip变量为接收初始连接的服务器IP地址
- 它设置local.ip变量为Varnish服务器的地址
- 它设置remote.ip变量为位于Varnish前端的机器的IP地址
HAProxy并不是唯一支持PROXY的TLS卸载程序。Varnish Software发布了Hitch,一个用来中止TLS连接并用HTTP与Varnish通信的TLS代理。然而HAProxy是提供TLS卸载的负载均衡器,而Hitch只有TLS卸载。这取决于你的用例以及你的设置中是否需要负载平衡,你可以选择HAPproxy或者专用的TLS代理。Varnish Plus,高级版本的Varnish,在服务器端和客户端提供了TLS/SSL支持。Varnish Plus中的TLS/SSL代理与Varnish紧密集成,帮助你在不依赖第三方解决方案的情况下提高网站安全性。
总结
Varnish是一个有着强大可伸缩性的工具,拥有大量的选项和可以调优的设置。
在Linux发行版中通过包管理器可以很容易的安装Varnish和运行,而且几乎可以不用调优。
网友评论