TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:
TOP云总站云服务器:https://topyun.vip/server/buy.html
TOP云C站云服务器:https://c.topyun.vip/cart
在云服务器上配置 Varnish 缓存 可以显著提升网站的性能,尤其是对动态内容(如 PHP、Java 生成的内容)进行缓存,减少后端服务器(如 Nginx、Apache、Tomcat)的负载,加快响应速度。Varnish 是一个高性能的 HTTP 反向代理缓存服务器,通常部署在 Web 服务器(如 Nginx/Apache)之前,作为前端缓存层。
一、Varnish 的核心作用
作用 | 说明 |
---|---|
缓存 HTTP 响应 | 将后端服务器返回的页面缓存到内存中,后续请求直接从 Varnish 返回,减少后端压力 |
加速动态内容 | 即使是 PHP/Java 生成的动态页面,也可以被缓存(需合理配置缓存规则) |
减轻后端负载 | 大量重复请求由 Varnish 直接响应,后端只需处理缓存未命中的请求 |
支持高并发 | Varnish 专为高并发设计,性能远超传统 Web 服务器 |
二、Varnish 的典型架构
客户端浏览器 ↓ Varnish(缓存层,监听 80/443 端口) ↓ Nginx/Apache/PHP-FPM(后端服务器,监听 8080 端口)
Varnish 监听 80/443 端口:直接接收用户请求。
后端服务器监听 8080 端口:Varnish 将未命中的请求转发给后端处理。
三、在云服务器上安装 Varnish
1. 系统要求
操作系统:Linux(推荐 Ubuntu 20.04/CentOS 7/8 或 Debian 10)
内存:建议至少 2GB(Varnish 主要依赖内存缓存)
云服务器:确保安全组开放 80(HTTP) 和 443(HTTPS) 端口
2. 安装 Varnish(以 Ubuntu 20.04 为例)
(1)添加 Varnish 官方仓库
curl -s https://packagecloud.io/install/repositories/varnishcache/varnish70/script.deb.sh | sudo bash
(2)安装 Varnish
sudo apt-get install varnish
(3)验证安装
varnishd -V
# 输出类似:varnishd (varnish-7.0.0 revision ...)
其他系统安装方式:
CentOS/RHEL:使用 yum install varnish(需先启用 EPEL 仓库)
Debian:类似 Ubuntu,添加仓库后安装
四、配置 Varnish 缓存
1. 修改 Varnish 监听端口(默认 6081)
Varnish 默认监听 6081 端口,但通常我们需要让它直接接管 80(HTTP) 或 443(HTTPS) 端口。
(1)编辑 Varnish 服务配置文件
sudo nano /etc/default/varnish
修改 DAEMON_OPTS,让 Varnish 监听 80 端口:
DAEMON_OPTS="-a :80 \ -T localhost:6082 \ -f /etc/varnish/default.vcl \ -S /etc/varnish/secret \ -s malloc,256M"
参数说明:
-a :80:监听 80 端口(HTTP)
-T localhost:6082:管理接口(默认 6082 端口)
-f /etc/varnish/default.vcl:指定 VCL 配置文件
-s malloc,256M:使用内存缓存,大小 256MB(可调整)
如果需要支持 HTTPS(443 端口):
Varnish 原生不支持 HTTPS,需在前端使用 Nginx/Apache 终止 SSL,再将 HTTP 请求转发给 Varnish(监听 80 端口)。
2. 配置缓存规则(VCL 文件)
Varnish 的核心配置是 VCL(Varnish Configuration Language) 文件,默认路径为 /etc/varnish/default.vcl。
(1)编辑默认 VCL 文件
sudo nano /etc/varnish/default.vcl
(2)示例配置(缓存 Nginx/Apache 的动态内容)
vcl 4.1; # 定义后端服务器(Nginx/Apache) backend default { .host = "127.0.0.1"; .port = "8080"; # 后端服务器端口(如 Nginx 监听 8080) } # 接收请求时的处理逻辑 sub vcl_recv { # 缓存所有 GET 和 HEAD 请求(排除 POST/PUT/DELETE 等写操作) if (req.method == "GET" || req.method == "HEAD") { return (hash); } # 不缓存带有 Cookie 的请求(如登录用户) if (req.http.Cookie) { return (pass); # 绕过缓存,直接访问后端 } # 不缓存动态 API 请求(如 /api/) if (req.url ~ "^/api/") { return (pass); } } # 缓存命中时的处理逻辑 sub vcl_backend_response { # 设置缓存时间为 1 小时(3600 秒) set beresp.ttl = 1h; # 如果后端返回 Set-Cookie 头,不缓存 if (beresp.http.Set-Cookie) { set beresp.uncacheable = true; set beresp.ttl = 120s; # 短期缓存 } } # 返回响应时的处理逻辑 sub vcl_deliver { # 添加 X-Cache 头,方便调试是否命中缓存 if (obj.hits > 0) { set resp.http.X-Cache = "HIT"; } else { set resp.http.X-Cache = "MISS"; } }
关键配置说明:
vcl_recv:定义哪些请求需要缓存(如 GET/HEAD,排除带 Cookie 的请求)。
vcl_backend_response:设置缓存时间(beresp.ttl)和缓存条件。
vcl_deliver:添加调试头(X-Cache: HIT/MISS)。
3. 重启 Varnish 使配置生效
sudo systemctl restart varnish
检查 Varnish 是否正常运行:
sudo systemctl status varnish
五、测试 Varnish 缓存
1. 检查缓存是否生效
使用 curl 请求网站,并观察响应头:
curl -I http://你的服务器IP
如果缓存命中,会返回:
HTTP/1.1 200 OK X-Cache: HIT ...
如果未命中,会返回:
HTTP/1.1 200 OK X-Cache: MISS ...
2. 手动清除缓存(可选)
Varnish 默认不提供直接清除所有缓存的命令,但可以通过以下方式管理缓存:
(1)重启 Varnish(清空所有缓存)
sudo systemctl restart varnish
(2)使用 varnishadm 清除特定 URL 的缓存
sudo varnishadm "ban req.url ~ /your-page-url"
示例:清除 /home 页面的缓存:
sudo varnishadm "ban req.url ~ /home"
六、生产环境优化建议
优化方向 | 建议 |
---|---|
缓存时间(TTL) | 根据业务需求设置合理的 beresp.ttl(如静态页面 1 小时,动态内容 1 分钟) |
排除敏感请求 | 不缓存带 Cookie 或 Authorization 头的请求(如登录用户) |
HTTPS 支持 | 在 Varnish 前端使用 Nginx/Apache 终止 SSL,Varnish 只处理 HTTP |
监控缓存命中率 | 通过 varnishstat 查看缓存性能指标 |
内存分配 | 根据服务器内存调整 -s malloc,256M(如 -s malloc,1G) |
七、监控 Varnish 性能
1. 查看缓存统计信息
varnishstat
重点关注:
cache_hit:缓存命中次数
cache_miss:缓存未命中次数
n_expired:过期缓存数量
n_lru_nuked:被 LRU 淘汰的缓存数量
2. 使用 varnishlog 调试请求
sudo varnishlog
可以实时查看请求处理过程,帮助排查缓存问题。
八、总结:Varnish 配置流程
步骤 | 操作 |
---|---|
1️⃣ 安装 Varnish | apt-get install varnish 或 yum install varnish |
2️⃣ 修改监听端口 | 编辑 /etc/default/varnish,设置 -a :80 |
3️⃣ 配置 VCL 规则 | 编辑 /etc/varnish/default.vcl,定义缓存策略 |
4️⃣ 重启 Varnish | systemctl restart varnish |
5️⃣ 测试缓存 | curl -I 检查 X-Cache: HIT/MISS |
6️⃣ 生产优化 | 调整 TTL、排除敏感请求、监控命中率 |