# Linux下怎么安装HTTP加速器Varnish
## 一、Varnish简介
### 1.1 什么是Varnish
Varnish是一款高性能的开源HTTP加速器,专为内容密集型动态网站设计。它采用现代架构设计,具有以下核心特点:
- **反向代理缓存**:作为反向代理服务器,缓存后端响应内容
- **内存级性能**:所有缓存对象存储在内存中,响应速度可达毫秒级
- **灵活的配置语言VCL**:使用Varnish Configuration Language实现高度定制化
- **高效的缓存策略**:支持多种缓存过期和清除机制
### 1.2 Varnish与传统方案对比
| 特性 | Varnish | Squid | Nginx缓存 |
|------------|---------|-------|-----------|
| 架构设计 | 事件驱动 | 进程驱动 | 事件驱动 |
| 缓存存储 | 纯内存 | 磁盘+内存 | 磁盘+内存 |
| 配置灵活性 | VCL语言 | 配置文件 | 配置文件 |
| 并发性能 | 极高 | 中等 | 高 |
### 1.3 典型应用场景
- 高并发新闻门户网站
- 电商平台商品页面
- API网关加速
- 动态内容边缘缓存
## 二、安装准备
### 2.1 系统要求
- **操作系统**:主流Linux发行版(CentOS/RHEL 7+, Ubuntu 18.04+)
- **内存**:建议至少4GB(生产环境推荐16GB+)
- **CPU**:现代多核处理器
- **磁盘空间**:100MB用于程序安装
### 2.2 环境准备
```bash
# 更新系统包(CentOS/RHEL)
sudo yum update -y
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
# 安装基础工具
sudo yum install -y epel-release curl wget # CentOS
sudo apt install -y curl wget vim # Ubuntu
# 添加Varnish仓库
sudo rpm --nosignature -i https://packagecloud.io/varnishcache/varnish70/el/7/noarch/varnish-release-7.0-1.noarch.rpm
# 安装Varnish
sudo yum install -y varnish
# 添加GPG密钥
curl -s https://packagecloud.io/install/repositories/varnishcache/varnish70/script.deb.sh | sudo bash
# 安装Varnish
sudo apt install -y varnish
# 安装依赖
sudo yum groupinstall -y "Development Tools"
sudo yum install -y python3-docutils libedit-devel
# 下载源码
wget https://varnish-cache.org/_downloads/varnish-7.3.0.tgz
tar xvf varnish-7.3.0.tgz
cd varnish-7.3.0
# 编译安装
./configure
make
sudo make install
varnishd -V
# 应输出类似信息:
# varnishd (varnish-7.3.0 revision 123456)
/etc/varnish/default.vcl
- VCL配置文件/etc/varnish/varnish.params
- 服务参数/lib/systemd/system/varnish.service
- systemd服务文件编辑/etc/varnish/varnish.params
:
# 修改监听端口为80
VARNISH_LISTEN_PORT=80
修改/etc/varnish/default.vcl
:
vcl 4.1;
backend default {
.host = "127.0.0.1";
.port = "8080"; # 后端服务器端口
}
sub vcl_recv {
# 缓存静态资源
if (req.url ~ "\.(css|js|jpg|jpeg|png|gif|ico|woff|woff2)$") {
return (hash);
}
}
sub vcl_backend_response {
# 设置缓存时间
if (bereq.url ~ "\.(css|js|jpg|jpeg|png|gif|ico|woff|woff2)$") {
set beresp.ttl = 1d;
} else {
set beresp.ttl = 10m;
}
}
sudo systemctl daemon-reload
sudo systemctl enable --now varnish
# 查看状态
sudo systemctl status varnish
# 重启服务
sudo systemctl restart varnish
# 查看实时日志
sudo journalctl -u varnish -f
修改/etc/varnish/varnish.params
:
# 根据服务器内存调整(建议不超过物理内存的80%)
VARNISH_STORAGE_SIZE=2G
VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}"
# 生产环境建议值
VARNISH_THREAD_POOL_MAX=4000
VARNISH_THREAD_POOL_MIN=100
# 增加文件描述符限制
echo "fs.file-max = 200000" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 调整TCP参数
echo "net.ipv4.tcp_tw_reuse = 1" | sudo tee -a /etc/sysctl.conf
echo "net.core.somaxconn = 65535" | sudo tee -a /etc/sysctl.conf
# 实时监控
varnishstat -1
# 监控特定指标
varnishstat -f MN.cache_hit,MN.cache_miss
安装varnishlog工具:
sudo yum install -y varnishncsa # CentOS
sudo apt install -y varnishncsa # Ubuntu
常用命令:
# 实时访问日志
varnishncsa
# 分析请求模式
varnishlog -q 'ReqURL ~ "^/products/"' -i requrl
# 清除特定URL
varnishadm "ban req.url == /product/1234"
# 清除整个域名缓存
varnishadm "ban req.http.host == example.com"
# 检查配置语法
varnishd -C -f /etc/varnish/default.vcl
# 测试模式运行
varnishd -d -f /etc/varnish/default.vcl
varnishstat -1 | grep -E 'MN.cache_(hit|miss)'
varnishstat -1 | grep BACKEND
错误代码 | 含义 | 解决方案 |
---|---|---|
503 | 后端不可用 | 检查后端服务状态 |
500 | VCL编译错误 | 使用varnishd -C 检查语法 |
400 | 无效请求 | 检查客户端请求格式 |
backend web1 {
.host = "192.168.1.10";
.port = "80";
.probe = {
.url = "/health";
.interval = 5s;
.timeout = 1s;
.window = 5;
.threshold = 3;
}
}
backend web2 {
.host = "192.168.1.11";
.port = "80";
.probe = healthcheck;
}
sub vcl_recv {
# 根据URL路径分配后端
if (req.url ~ "^/api/") {
set req.backend_hint = web1;
} else {
set req.backend_hint = web2;
}
}
sub vcl_backend_response {
# 启用ESI处理
if (beresp.http.content-type ~ "text/html") {
set beresp.do_esi = true;
}
}
acl purge {
"localhost";
"192.168.1.0"/24;
}
sub vcl_recv {
if (req.method == "PURGE") {
if (!client.ip ~ purge) {
return(synth(405,"Method not allowed"));
}
return (purge);
}
}
sub vcl_recv {
# 强制HTTPS
if (req.http.X-Forwarded-Proto !~ "(?i)https") {
return (synth(750, ""));
}
}
sub vcl_synth {
if (resp.status == 750) {
set resp.status = 301;
set resp.http.Location = "https://" + req.http.Host + req.url;
return(deliver);
}
}
Varnish作为高性能HTTP加速器,能显著提升网站响应速度和并发处理能力。本文详细介绍了从安装到配置的全过程,包括: 1. 多种安装方法比较 2. 基础配置模板 3. 性能优化技巧 4. 常见问题解决方案
建议生产环境部署前进行充分的压力测试,根据实际业务特点调整缓存策略。更多高级功能可参考官方文档。 “`
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。