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"]

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

十二、总结 #

本章我们学习了:

  1. 安装前准备:系统要求和依赖项
  2. 包管理器安装:各平台快速安装方法
  3. 源码编译安装:自定义编译选项
  4. Docker部署:容器化部署方案
  5. Kubernetes部署:云原生部署方案
  6. 安装验证:确保安装成功
  7. 启动参数:常用配置选项

安装完成后,让我们进入下一章,学习Varnish的配置基础!

最后更新:2026-03-28