快速开始
想要快速的体验 Varnish ,可以直接使用雨云免费部署,使用带有我 AFF 的链接可以享受新用户 5 折优惠,后续也可享受其他优惠,优惠码wp-admin
一键部署默认提供一个简单的单后端配置文件
vcl 4.1;
backend default {
.host = "127.0.0.1"; // 替换为你的Web服务器IP
.port = "8080"; // 替换为你的Web服务器端口
}
sub vcl_recv {
# 在这里添加请求处理逻辑
return (hash);
}
sub vcl_backend_response {
# 在这里添加后端响应处理逻辑
set beresp.ttl = 10m; # 设置缓存时间为10分钟
}
更多模板
多后端负载均衡
vcl 4.1;
import directors;
# 定义多个后端服务器
backend server1 {
.host = "192.168.1.10"; # 第一个后端服务器IP
.port = "8080"; # 端口
.max_connections = 200; # 最大连接数限制
}
backend server2 {
.host = "192.168.1.11"; # 第二个后端服务器IP
.port = "8080";
.max_connections = 200;
}
backend server3 {
.host = "192.168.1.12"; # 第三个后端服务器IP
.port = "8080";
.max_connections = 200;
}
# 负载均衡算法
sub vcl_init {
new lb = directors.round_robin(); # 轮询算法
# new lb = directors.random(); # 随机选择后端
# new lb = directors.client_ip_hash(); # 基于客户端IP哈希
lb.add_backend(server1);
lb.add_backend(server2);
lb.add_backend(server3);
}
sub vcl_recv {
# 将请求发送到负载均衡器
set req.backend_hint = lb.backend();
return (hash);
}
sub vcl_backend_response {
# 设置默认缓存时间为10分钟
set beresp.ttl = 10m;
# 可选:根据后端服务器设置不同的缓存标识
set beresp.http.X-Backend-Server = bereq.backend.name;
}
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";
}
}
IP 黑名单
vcl 4.1;
backend default {
.host = "127.0.0.1";
.port = "8080";
.max_connections = 200;
}
# 定义需要封锁的 IP 地址或 IP 段
acl blocked_ips {
"192.168.1.100"; // 单个 IP 地址
"10.0.0.0"/8; // 整个 IP 段(CIDR 写法)
}
sub vcl_recv {
# 检查客户端IP是否在封锁列表中
if (client.ip ~ blocked_ips) {
# 返回403 Forbidden错误
return (synth(403, "Access denied: Your IP address is blocked"));
}
return (hash);
}
# 处理合成响应(如403错误)
sub vcl_synth {
if (resp.status == 403) {
# 可以自定义403页面内容
set resp.http.Content-Type = "text/html; charset=utf-8";
synthetic(
{"<!DOCTYPE html>
<html>
<head>
<title>Access Denied</title>
</head>
<body>
<h1>403 - Access Denied</h1>
<p>Your IP address has been blocked. If you believe this is an error, please contact support.</p>
</body>
</html>"}
);
return (deliver);
}
}
sub vcl_backend_response {
# 设置默认缓存时间为10分钟
set beresp.ttl = 10m;
}
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";
}
}
适用于 WordPress 的缓存规则
vcl 4.1;
# 定义WordPress后端服务器
backend wordpress {
.host = "127.0.0.1";
.port = "8080";
}
# WordPress专用缓存规则
sub vcl_recv {
# 仅缓存GET和HEAD请求
if (req.method != "GET" && req.method != "HEAD") {
return (pass);
}
# 不缓存管理员页面、登录页和API请求
if (req.url ~ "^/wp-admin" ||
req.url ~ "^/wp-login.php" ||
req.url ~ "^/wp-json" ||
req.url ~ "^/xmlrpc.php") {
return (pass);
}
# 不缓存带查询参数的请求(除常见静态资源)
if (req.url ~ "\?" && !(req.url ~ "\.(js|css|png|jpg|jpeg|gif|ico|svg)\?") ) {
return (pass);
}
# 对静态资源设置较长缓存
if (req.url ~ "\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$") {
set req.ttl = 30d;
}
# 正常缓存其他内容
return (hash);
}
sub vcl_backend_response {
# 从后端响应中移除不需要的缓存控制头
unset beresp.http.Cache-Control;
unset beresp.http.Expires;
unset beresp.http.Pragma;
unset beresp.http.Set-Cookie;
# 静态资源缓存30天
if (bereq.url ~ "\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$") {
set beresp.ttl = 30d;
set beresp.http.Cache-Control = "public, max-age=2592000";
}
# 其他内容缓存5分钟
else {
set beresp.ttl = 5m;
set beresp.http.Cache-Control = "public, max-age=300";
}
# 允许缓存带Cookie的响应
if (beresp.http.Set-Cookie) {
set beresp.http.Set-Cookie = ";" + beresp.http.Set-Cookie;
set beresp.http.Set-Cookie = regsuball(beresp.http.Set-Cookie, "; +", "; ");
set beresp.http.Set-Cookie = regsuball(beresp.http.Set-Cookie, ";(wp-settings-[0-9a-z_]+|wp_test_cookie)=[^;]+", "; \1=; Max-Age=0");
set beresp.http.Set-Cookie = regsuball(beresp.http.Set-Cookie, ";[^ ][^;]*", "");
set beresp.http.Set-Cookie = regsuball(beresp.http.Set-Cookie, "^[; ]+|[; ]+$", "");
if (beresp.http.Set-Cookie == "") {
unset beresp.http.Set-Cookie;
}
}
}
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";
}
}