Varnish安装 #
一、安装前准备 #
1.1 系统要求 #
| 要求 | 最低配置 | 推荐配置 |
|---|---|---|
| 操作系统 | Linux/Unix | Linux (CentOS/Ubuntu) |
| CPU | 1核 | 4核+ |
| 内存 | 1GB | 8GB+ |
| 磁盘 | 10GB | SSD存储 |
| 内核版本 | 3.x+ | 4.x+ |
1.2 依赖项 #
bash
# Ubuntu/Debian
sudo apt update
sudo apt install -y build-essential automake autoconf libtool \
pkg-config libpcre2-dev libncurses-dev python3-docutils \
libedit-dev curl
# CentOS/RHEL
sudo yum groupinstall -y "Development Tools"
sudo yum install -y autoconf automake libtool \
pcre2-devel ncurses-devel python3-docutils \
libedit-devel curl
二、包管理器安装 #
2.1 Ubuntu/Debian #
bash
# 更新包索引
sudo apt update
# 安装Varnish
sudo apt install -y varnish
# 验证安装
varnishd -V
安装最新版本:
bash
# 添加官方仓库
curl -s https://packagecloud.io/install/repositories/varnishcache/varnish71/script.deb.sh | sudo bash
# 安装Varnish 7.1
sudo apt install -y varnish
2.2 CentOS/RHEL #
bash
# 安装EPEL仓库
sudo yum install -y epel-release
# 安装Varnish
sudo yum install -y varnish
# 验证安装
varnishd -V
安装最新版本:
bash
# 添加官方仓库
curl -s https://packagecloud.io/install/repositories/varnishcache/varnish71/script.rpm.sh | sudo bash
# 安装Varnish 7.1
sudo yum install -y varnish
2.3 Fedora #
bash
sudo dnf install -y varnish
varnishd -V
2.4 macOS #
bash
# 使用Homebrew安装
brew install varnish
# 验证安装
varnishd -V
2.5 FreeBSD #
bash
# 使用pkg安装
pkg install varnish7
# 或使用ports
cd /usr/ports/www/varnish7
make install clean
三、源码编译安装 #
3.1 下载源码 #
bash
# 创建工作目录
mkdir -p ~/varnish-build && cd ~/varnish-build
# 下载最新稳定版本
curl -LO https://varnish-cache.org/_downloads/varnish-7.1.0.tgz
# 解压
tar -xzf varnish-7.1.0.tgz
cd varnish-7.1.0
3.2 编译安装 #
bash
# 配置编译选项
./configure \
--prefix=/usr/local/varnish \
--with-pcre2 \
--enable-jemalloc
# 编译
make -j$(nproc)
# 安装
sudo make install
3.3 编译选项说明 #
| 选项 | 说明 |
|---|---|
| –prefix | 安装路径 |
| –with-pcre2 | 使用PCRE2正则库 |
| –enable-jemalloc | 使用jemalloc内存分配器 |
| –disable-static | 禁用静态库 |
| –enable-developer-warnings | 开发者警告 |
3.4 配置环境变量 #
bash
# 添加到 ~/.bashrc 或 ~/.zshrc
export PATH=/usr/local/varnish/bin:$PATH
export MANPATH=/usr/local/varnish/share/man:$MANPATH
# 生效
source ~/.bashrc
3.5 创建系统服务 #
创建systemd服务文件:
bash
sudo tee /etc/systemd/system/varnish.service << 'EOF'
[Unit]
Description=Varnish Cache, a high-performance HTTP accelerator
After=network.target
[Service]
Type=forking
PIDFile=/var/run/varnish.pid
ExecStart=/usr/local/varnish/sbin/varnishd \
-a :6081 \
-T localhost:6082 \
-f /usr/local/varnish/etc/varnish/default.vcl \
-s malloc,256m
ExecReload=/usr/local/varnish/bin/varnishreload
ExecStop=/usr/bin/kill -9 $MAINPID
[Install]
WantedBy=multi-user.target
EOF
# 重载systemd
sudo systemctl daemon-reload
四、Docker部署 #
4.1 使用官方镜像 #
bash
# 拉取镜像
docker pull varnish:7.1
# 运行容器
docker run -d \
--name varnish \
-p 6081:80 \
-v $(pwd)/default.vcl:/etc/varnish/default.vcl \
varnish:7.1
4.2 Docker Compose部署 #
yaml
version: '3.8'
services:
varnish:
image: varnish:7.1
container_name: varnish
ports:
- "6081:80"
volumes:
- ./default.vcl:/etc/varnish/default.vcl
environment:
- VARNISH_SIZE=256m
depends_on:
- backend
backend:
image: nginx:alpine
container_name: backend
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
启动服务:
bash
docker-compose up -d
4.3 自定义Dockerfile #
dockerfile
FROM varnish:7.1
# 复制自定义VCL
COPY default.vcl /etc/varnish/default.vcl
# 复制启动脚本
COPY start.sh /start.sh
RUN chmod +x /start.sh
# 设置环境变量
ENV VARNISH_SIZE=512m
CMD ["/start.sh"]
bash
#!/bin/bash
varnishd -a :80 -T :6082 -f /etc/varnish/default.vcl -s malloc,$VARNISH_SIZE
五、Kubernetes部署 #
5.1 Deployment配置 #
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: varnish
labels:
app: varnish
spec:
replicas: 3
selector:
matchLabels:
app: varnish
template:
metadata:
labels:
app: varnish
spec:
containers:
- name: varnish
image: varnish:7.1
ports:
- containerPort: 80
volumeMounts:
- name: varnish-config
mountPath: /etc/varnish/default.vcl
subPath: default.vcl
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"
volumes:
- name: varnish-config
configMap:
name: varnish-config
---
apiVersion: v1
kind: Service
metadata:
name: varnish
spec:
selector:
app: varnish
ports:
- port: 80
targetPort: 80
type: LoadBalancer
5.2 ConfigMap配置 #
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: varnish-config
data:
default.vcl: |
vcl 4.1;
backend default {
.host = "backend-service";
.port = "80";
}
sub vcl_recv {
return (hash);
}
六、安装验证 #
6.1 版本检查 #
bash
# 查看版本
varnishd -V
# 输出示例
varnishd (varnish-7.1.0 revision 123456)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2021 Varnish Software AS
6.2 服务状态 #
bash
# 启动服务
sudo systemctl start varnish
# 查看状态
sudo systemctl status varnish
# 设置开机自启
sudo systemctl enable varnish
6.3 功能测试 #
bash
# 创建测试VCL
sudo tee /etc/varnish/default.vcl << 'EOF'
vcl 4.1;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
EOF
# 启动后端测试服务器
python3 -m http.server 8080 &
# 测试请求
curl -I http://localhost:6081/
# 查看缓存状态
curl -I http://localhost:6081/ | grep -i "x-varnish"
6.4 管理接口测试 #
bash
# 连接管理接口
varnishadm -T localhost:6082
# 常用命令
varnishadm -T localhost:6082 status
varnishadm -T localhost:6082 vcl.list
varnishadm -T localhost:6082 backend.list
七、目录结构 #
7.1 安装目录 #
| 目录 | 说明 |
|---|---|
| /usr/sbin/varnishd | 主程序 |
| /usr/bin/varnishadm | 管理工具 |
| /usr/bin/varnishlog | 日志查看 |
| /usr/bin/varnishncsa | NCSA格式日志 |
| /usr/bin/varnishstat | 统计信息 |
| /usr/bin/varnishtop | 日志统计 |
| /usr/bin/varnishhist | 延迟直方图 |
| /etc/varnish/ | 配置目录 |
| /lib/systemd/system/varnish.service | 服务文件 |
7.2 配置文件 #
bash
/etc/varnish/
├── default.vcl # 默认VCL配置
├── secret # 管理接口密钥
└── varnish.params # 启动参数(RHEL系)
八、网络配置 #
8.1 端口说明 #
| 端口 | 说明 |
|---|---|
| 6081 | HTTP代理端口(默认) |
| 6082 | 管理接口端口 |
| 80 | 生产环境常用 |
8.2 防火墙配置 #
bash
# Ubuntu/Debian (ufw)
sudo ufw allow 6081/tcp
sudo ufw allow 6082/tcp
# CentOS/RHEL (firewalld)
sudo firewall-cmd --permanent --add-port=6081/tcp
sudo firewall-cmd --permanent --add-port=6082/tcp
sudo firewall-cmd --reload
8.3 SELinux配置 #
bash
# 查看SELinux状态
getenforce
# 临时关闭(不推荐生产环境)
sudo setenforce 0
# 配置SELinux策略
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P varnishd_can_network_relay 1
九、启动参数配置 #
9.1 systemd服务配置 #
Ubuntu/Debian方式:
bash
# 编辑服务文件
sudo systemctl edit varnish
# 添加配置
[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd \
-j unix,user=vcache \
-a :6081 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m
RHEL/CentOS方式:
bash
# 编辑参数文件
sudo vi /etc/varnish/varnish.params
# 修改配置
VARNISH_VCL_CONF=/etc/varnish/default.vcl
VARNISH_LISTEN_PORT=6081
VARNISH_ADMIN_LISTEN_ADDRESS=localhost
VARNISH_ADMIN_LISTEN_PORT=6082
VARNISH_SECRET_FILE=/etc/varnish/secret
VARNISH_STORAGE="malloc,256m"
9.2 常用启动参数 #
| 参数 | 说明 | 示例 |
|---|---|---|
| -a | 监听地址和端口 | -a :6081 |
| -T | 管理接口地址 | -T localhost:6082 |
| -f | VCL配置文件 | -f /etc/varnish/default.vcl |
| -S | 密钥文件 | -S /etc/varnish/secret |
| -s | 存储配置 | -s malloc,1G |
| -p | 运行时参数 | -p thread_pool_min=50 |
| -t | 默认TTL | -t 120 |
十、常见问题 #
10.1 端口被占用 #
bash
# 查看端口占用
sudo lsof -i :6081
# 修改监听端口
sudo vi /etc/varnish/varnish.params
VARNISH_LISTEN_PORT=80
10.2 权限问题 #
bash
# 检查文件权限
ls -la /etc/varnish/
# 修复权限
sudo chown -R vcache:vcache /var/lib/varnish
sudo chmod 600 /etc/varnish/secret
10.3 内存不足 #
bash
# 调整存储大小
-s malloc,512m
# 或使用文件存储
-s file,/var/lib/varnish/varnish_storage.bin,1G
10.4 VCL语法错误 #
bash
# 检查VCL语法
varnishd -C -f /etc/varnish/default.vcl
# 查看详细错误
varnishd -d -f /etc/varnish/default.vcl
十一、卸载 #
11.1 包管理器卸载 #
bash
# Ubuntu/Debian
sudo apt remove --purge varnish
sudo apt autoremove
# CentOS/RHEL
sudo yum remove varnish
11.2 源码安装卸载 #
bash
cd ~/varnish-build/varnish-7.1.0
sudo make uninstall
# 清理文件
sudo rm -rf /usr/local/varnish
sudo rm /etc/systemd/system/varnish.service
sudo systemctl daemon-reload
十二、总结 #
本章我们学习了:
- 安装前准备:系统要求和依赖项
- 包管理器安装:各平台快速安装方法
- 源码编译安装:自定义编译选项
- Docker部署:容器化部署方案
- Kubernetes部署:云原生部署方案
- 安装验证:确保安装成功
- 启动参数:常用配置选项
安装完成后,让我们进入下一章,学习Varnish的配置基础!
最后更新:2026-03-28