Varnish 概述
Varnish 是一款高性能、开源的反向代理服务器和缓存服务器。并且,Varnish 还能提供以下功能:
- web 应用防火墙
 - DDoS 防护
 - 网站防盗链
 - 负载均衡
 - 单点登录(SSO)网关
 - 认证与授权
 - 后端主机快速修复
 - HTTP 路由
 
Varnish 缓存策略的实现是通过 VCL(Varnish Configuration Language)实现,VCL 的语法简单,继承了 C 语言的很多特性,使得 VCL 样式看起来很像 C 和 PELR 语言,运行 Varnish 时,此配置将转换为 C 代码,然后送入 C 编译器,加载并执行。
Squid 与 Varnish 对比
| 软件 | 存储模式 | 共享存储 | 性能 | 
|---|---|---|---|
| Squid | 硬盘 | 可并联,但很复杂 | 较高 | 
| Varnish | 硬盘/内存 | 不能 | 很高 | 
Varnish 对比 Squid 的优点:
- Varnish 稳定性比 Squid 高,Squid 发生故障的几率要高于 Varnish
 - Varnish 访问速度比 Squid 快,因为 Varnish 采用了Visual Page Cache,所有缓存之久从内存中读取,而 Squid 从硬盘读取,所以 Varnish 会更快。
 - Varnish 支持更高的并发连接,因为 Varnish 的 TCP 连接释放要比 Squid 快。
 - Varnish 可以通过管理端口,使用正则表达式批量清除缓存。
 - Varnish 可通过 fork 进行多进程处理,而 Squid 仅是单进程。
 
Varnish 对比 Squid 的缺点:
- 一旦 Varnish 宕机或重启,缓存数据会在内存中丢失,所有请求就又给了后端服务器,造成后端的压力。
 - Varnish 在高并发下,CPU、I/O 和内存资源开销会高于 Squid。
 
Varnish 基本配置
最好直接从官网下载,不要通过 epel 库下载,因为 epel 库中的 varnish 版本过老。或者从 varnish 官方提供的 repo 中下载。官方 repo 配置(貌似已不可用)。或者下载源码编译安装。
编译安装可能需要的依赖python-docutils、libedit-devel
进入解压目录,直接./configure --prefix=/usr/local/varnish6编译之后make && make install即可。
Varnish 提供以下工具:
**
varnishd**:是 Varnish 的核心进程,以守护进程方式运行,接收 http 请求并转发到后端,进行缓存并响应客户端。存放在安装目录的sbin中**
varnishtest**:Varnish 测试工具,可验证 Varnish 安装、可自定义 client 请求模型、可与 Varnish 交互**
varnishadm**:Varnish 实例命令行管理工具**
varnishstat**:可访问全局计算器,提供全面统计信息。**
varnishlog**:显示 Varnish 日志,显示的是实时日志,最好设置好过滤规则,支持精确日志匹配**
varnishncsa、varnishtop、varnishhist**是 Varnish 的性能及状态分析工具varnishhist:读取 varnish 日志,生成连续的柱状图,若缓存命中则标记|,若没命中则标记#15_ |
| |
| #
+--------------+--------------+--------------+--------------+----
|1e-6 |1e-5 |1e-4 |1e-3 |1e-2varnishtop:读取日志,显示实时日志信息,类似varnishlog,支持过滤varnishncsa:实时显示请求日志信息
安装目录中是没有配置文件的,需要将解压目录中etc/example.vcl复制到安装目录中,并改名为default.vcl。
修改配置文件
backend default { # 默认的后端服务器配置,默认为本机  | 
然后开启 varnish。varnishd -f /var/local/varnish6/default.vcl,通过-f指定配置文件,而且配置文件的路径一定要是绝对路径,否则会提示没有该文件。确保该指定端口在本地没有被占用。
启动成功后,可以看到默认 varnish 启动了两个进程
# ps -ef | grep varnish  | 
通过浏览器访问 Varnish 服务器,使用开发者工具可看到响应头中的消息显示是 Varnish 返回的。

可以通过backend块定义多个后端服务器。
backend host2 {  | 
参考文章
高性能网站构建实战