Varnish HTTP 缓存加速教程

Varnish Cache 是一款高性能的 HTTP 反向代理缓存服务器,通过将 Web 内容缓存在内存中来大幅提升网站响应速度。它使用自定义的 VCL(Varnish Configuration Language)语言来定义灵活的缓存策略。在搬瓦工 VPS 上部署 Varnish 可以将网站性能提升数倍至数十倍。

一、安装 Varnish

# Ubuntu/Debian
apt update
apt install varnish -y

# 安装最新版本(官方仓库)
curl -s https://packagecloud.io/install/repositories/varnishcache/varnish75/script.deb.sh | bash
apt install varnish -y

# CentOS
yum install varnish -y

# 验证安装
varnishd -V

二、基础配置

2.1 修改监听端口

# 编辑 Varnish 服务配置
# Ubuntu 22.04
nano /etc/default/varnish

# 修改监听端口为 80
DAEMON_OPTS="-a :80 \
  -T localhost:6082 \
  -f /etc/varnish/default.vcl \
  -S /etc/varnish/secret \
  -s malloc,256m"

# 同时修改 systemd 服务文件
systemctl edit --full varnish
# 找到 ExecStart 行,修改端口为 80

2.2 修改后端服务器

将 Nginx 改为监听 8080 端口,Varnish 监听 80 端口:

# 修改 Nginx 监听端口为 8080
# 编辑 /etc/nginx/sites-available/default
# 将 listen 80 改为 listen 8080

三、VCL 配置

cat > /etc/varnish/default.vcl <<'EOF'
vcl 4.1;

backend default {
    .host = "127.0.0.1";
    .port = "8080";
    .connect_timeout = 5s;
    .first_byte_timeout = 60s;
    .between_bytes_timeout = 10s;
}

sub vcl_recv {
    # 移除不影响缓存的 Cookie
    if (req.url ~ "\.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2)$") {
        unset req.http.Cookie;
        return (hash);
    }

    # 不缓存带认证的请求
    if (req.http.Authorization) {
        return (pass);
    }

    # 不缓存 POST 请求
    if (req.method == "POST") {
        return (pass);
    }

    # 不缓存管理后台
    if (req.url ~ "^/admin" || req.url ~ "^/wp-admin") {
        return (pass);
    }

    # 规范化 Accept-Encoding
    if (req.http.Accept-Encoding) {
        if (req.url ~ "\.(jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf)$") {
            unset req.http.Accept-Encoding;
        } elsif (req.http.Accept-Encoding ~ "gzip") {
            set req.http.Accept-Encoding = "gzip";
        } elsif (req.http.Accept-Encoding ~ "deflate") {
            set req.http.Accept-Encoding = "deflate";
        } else {
            unset req.http.Accept-Encoding;
        }
    }

    return (hash);
}

sub vcl_backend_response {
    # 静态资源缓存 7 天
    if (bereq.url ~ "\.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2)$") {
        set beresp.ttl = 7d;
        unset beresp.http.Set-Cookie;
    }

    # HTML 页面缓存 1 小时
    if (beresp.http.Content-Type ~ "text/html") {
        set beresp.ttl = 1h;
    }

    # 不缓存错误响应
    if (beresp.status >= 400) {
        set beresp.ttl = 0s;
        set beresp.uncacheable = true;
    }

    # 启用 Grace 模式(后端故障时提供过期缓存)
    set beresp.grace = 6h;

    return (deliver);
}

sub vcl_deliver {
    # 添加缓存命中/未命中标识头
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
        set resp.http.X-Cache-Hits = obj.hits;
    } else {
        set resp.http.X-Cache = "MISS";
    }

    # 移除 Varnish 标识头(安全考虑)
    unset resp.http.X-Varnish;
    unset resp.http.Via;
}
EOF

四、启动与验证

# 检查 VCL 配置语法
varnishd -C -f /etc/varnish/default.vcl

# 启动 Varnish
systemctl start varnish
systemctl enable varnish

# 验证缓存是否工作
curl -I http://localhost/
# 查看 X-Cache 响应头:HIT 表示命中缓存,MISS 表示未命中

五、缓存管理

# 清除所有缓存
varnishadm "ban req.url ~ ."

# 清除特定 URL 的缓存
varnishadm "ban req.url == /index.html"

# 清除特定路径下的缓存
varnishadm "ban req.url ~ ^/blog/"

# 使用 PURGE 方法清除(需要 VCL 配置支持)
curl -X PURGE http://localhost/page-to-purge

六、性能监控

# 实时统计面板
varnishstat

# 实时请求日志
varnishlog

# 查看命中率
varnishstat -f MAIN.cache_hit -f MAIN.cache_miss

# Top 请求统计
varnishtop -i ReqURL

# 生成历史统计
varnishhist

七、性能调优

# 调整缓存大小(在 /etc/default/varnish 中)
# 256MB 适合 1GB 内存的 VPS
-s malloc,256m

# 512MB 适合 2GB 内存的 VPS
-s malloc,512m

# 使用文件存储(大缓存场景)
-s file,/var/lib/varnish/storage.bin,2G

# 调整线程参数
-p thread_pool_min=50
-p thread_pool_max=1000
-p thread_pool_timeout=120

八、健康检查

# 在 VCL 中配置后端健康检查
cat >> /etc/varnish/default.vcl <<'EOF'
backend default {
    .host = "127.0.0.1";
    .port = "8080";
    .probe = {
        .url = "/health";
        .timeout = 2s;
        .interval = 5s;
        .window = 5;
        .threshold = 3;
    }
}
EOF

# 查看后端健康状态
varnishadm backend.list

总结

Varnish 是提升网站性能最有效的方案之一,特别适合内容变化不频繁的网站。配合 Brotli 压缩HTTP/2 升级 可以进一步优化 Web 性能。选购搬瓦工 VPS 请查看 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 访问官网。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。