Varnish #

什么是 Varnish #

Varnish Cache 是一款高性能的开源 HTTP 加速器,也被称为 HTTP 反向代理缓存。它被设计用于加速动态内容网站,通过缓存 HTTP 请求来减轻后端服务器的负载。

核心特点 #

特点 说明
高性能 基于内存缓存,速度极快
灵活配置 VCL语言提供强大配置能力
ESI支持 支持边缘侧包含,实现页面片段缓存
负载均衡 内置负载均衡和健康检查
丰富扩展 VMOD模块生态系统

应用场景 #

  • 网站加速:缓存静态和动态内容
  • API缓存:减轻后端API服务器压力
  • 负载均衡:分发请求到多个后端服务器
  • DDoS防护:限制恶意请求流量
  • A/B测试:基于请求特征路由流量

文档结构 #

本指南按以下结构组织,适合初学者按顺序学习:

1. 基础入门 #

主题 描述 文档链接
Varnish简介 Varnish的发展历史、架构原理、应用场景 varnish-intro.md
Varnish安装 各平台安装方法、源码编译安装 varnish-install.md
配置基础 配置文件结构、基本语法、运行参数 varnish-config-basics.md
基本命令 启动、停止、重载、状态查看 varnish-commands.md

2. 核心功能 #

主题 描述 文档链接
VCL语言 VCL语法、内置子程序、变量详解 vcl-language.md
缓存策略 缓存规则、TTL设置、缓存键计算 caching-strategy.md
后端服务器 后端定义、健康检查、动态后端 backend-servers.md
负载均衡 轮询、哈希、随机等调度算法 load-balancing.md

3. 进阶配置 #

主题 描述 文档链接
缓存规则 请求过滤、响应处理、条件缓存 caching-rules.md
缓存失效 BAN方法、PURGE方法、主动失效 cache-invalidation.md
请求处理 请求修改、头信息处理、重定向 request-processing.md
响应处理 响应修改、压缩处理、错误页面 response-processing.md

4. 高级应用 #

主题 描述 文档链接
ESI边缘包含 ESI语法、片段缓存、动态组装 esi.md
健康检查 探测配置、后端状态、故障转移 health-check.md
限流防护 请求限制、IP黑名单、DDoS防护 rate-limiting.md
性能调优 内存配置、线程优化、内核参数 performance-tuning.md

5. 扩展应用 #

主题 描述 文档链接
VMOD扩展 常用VMOD、自定义VMOD开发 vmod.md
日志分析 Varnishlog、Varnishncsa、日志格式 log-analysis.md
监控告警 Prometheus集成、性能指标、告警配置 monitoring.md
故障排查 常见问题、调试技巧、性能诊断 troubleshooting.md

学习路线 #

text
入门阶段
├── Varnish简介
├── 安装配置
├── 配置基础
└── 基本命令

基础阶段
├── VCL语言
├── 缓存策略
├── 后端服务器
└── 负载均衡

进阶阶段
├── 缓存规则
├── 缓存失效
├── 请求处理
└── 响应处理

高级阶段
├── ESI边缘包含
├── 健康检查
├── 限流防护
└── 性能调优

扩展阶段
├── VMOD扩展
├── 日志分析
├── 监控告警
└── 故障排查

适用人群 #

人群 建议
初学者 从基础入门开始,按顺序学习
后端开发者 重点学习VCL语言和缓存策略
运维工程师 重点学习性能调优和监控告警
架构师 全面掌握,重点关注高可用架构

学习建议 #

  1. 动手实践:搭建测试环境,多写VCL配置
  2. 理解原理:了解缓存机制和请求处理流程
  3. 项目实战:结合实际网站优化场景学习
  4. 性能优化:学习调优技巧和监控方法
  5. 持续学习:关注新版本特性和VMOD生态

版本说明 #

本教程基于 Varnish 7.x 版本编写,同时兼顾 6.x 版本的兼容性说明。

快速开始 #

安装 Varnish #

bash
# Ubuntu/Debian
sudo apt update
sudo apt install varnish

# CentOS/RHEL
sudo yum install varnish

# macOS
brew install varnish

启动 Varnish #

bash
# 启动服务
sudo systemctl start varnish

# 设置开机自启
sudo systemctl enable varnish

最简配置 #

vcl
vcl 4.1;

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

sub vcl_recv {
    # 缓存所有静态文件
    if (req.url ~ "\.(png|gif|jpg|css|js)$") {
        return (hash);
    }
}

sub vcl_backend_response {
    # 设置缓存时间
    set beresp.ttl = 1h;
}

开始你的Varnish学习之旅吧!

最后更新:2026-03-28