新手求助:如何使用Varnish仅缓存网站首页及VCL配置写法
Varnish Cache入门及仅缓存首页配置指南
一、Varnish入门基础操作
1. 安装Varnish
根据你的操作系统选择对应命令:
- Ubuntu/Debian:
sudo apt update && sudo apt install varnish - CentOS/RHEL:
sudo dnf install varnish
2. 启动并验证服务
启动服务:
sudo systemctl start varnish
设置开机自启:
sudo systemctl enable varnish
验证运行状态:
sudo systemctl status varnish
测试默认配置是否生效(访问本地Varnish代理):
curl -I http://localhost
二、仅缓存xyz.com首页的VCL配置
Varnish的核心配置文件默认路径为/etc/varnish/default.vcl,以下是针对你的需求编写的配置:
完整VCL代码
# 定义后端服务器(替换为你实际的网站IP或域名,端口一般是80/443) backend default { .host = "127.0.0.1"; .port = "8080"; } sub vcl_recv { # 只处理xyz.com的请求 if (req.http.host != "xyz.com") { return (pass); # 非目标域名直接转发,不缓存 } # 仅对首页(/)启用缓存 if (req.url == "/") { # 标记为可缓存的请求 return (hash); } else { # 其他页面直接转发,不缓存 return (pass); } } sub vcl_backend_response { # 仅对首页设置缓存时长(这里设为1小时,可根据需求调整) if (bereq.url == "/") { set beresp.ttl = 1h; # 忽略后端返回的禁止缓存头部,强制缓存 unset beresp.http.cache-control; set beresp.http.cache-control = "public, max-age=3600"; } } 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"; } }
配置说明
- 后端定义:
backend default里的.host和.port要替换成你实际网站的地址,比如你的网站运行在本地80端口就改成.port = "80"。 - 请求处理(vcl_recv):先判断域名是否为xyz.com,不是则直接转发;是则检查请求路径是否为首页,仅首页进入缓存流程。
- 后端响应处理(vcl_backend_response):对首页的响应设置缓存时长(1小时),同时覆盖后端可能返回的禁止缓存头部,确保缓存生效。
- 调试标识:
vcl_deliver里添加的X-Cache头可以帮你判断请求是命中缓存(HIT)还是未命中(MISS),方便验证配置。
应用配置
修改完VCL后,重载配置使生效:
sudo systemctl reload varnish
或者使用Varnish自带的重载命令:
sudo varnishreload
验证缓存效果
用curl测试首页,查看响应头的X-Cache字段:
curl -I http://xyz.com
第一次请求应该显示X-Cache: MISS,再次请求则显示X-Cache: HIT,说明缓存生效。
内容的提问来源于stack exchange,提问作者Gourav gaur
相关产品推荐
相关产品推荐

