
目标:实现全站静态/动态加速、缓存命中高、可用性≥99.9%、支持自动回源与缓存失效。
推荐开源组件:边缘缓存使用 Nginx 或 Varnish,负载均衡使用 HAProxy,控制高可用使用 Keepalived(VRRP),源站可为 Nginx/Apache,分发同步使用 rsync 或对象存储(S3/MinIO)。
硬件/网络:至少两台边缘节点、两台负载均衡器、冗余公网 IP/浮动 IP、监控与日志服务器。
在 Debian/Ubuntu 上安装示例:apt update && apt install -y nginx varnish haproxy keepalived rsync certbot。
确保内核参数(net.ipv4.ip_forward、tcp_tw_reuse)、文件句柄(ulimit -n 65535)调整到生产级别。
设置时间同步(chrony/ntp)与监控(Prometheus + node_exporter)和日志采集(Filebeat/ELK)。
若用 Nginx 做边缘缓存(proxy_cache):在 nginx.conf 中启用 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:10m max_size=50g inactive=60d;
在域名 server 配置中使用:
proxy_cache mycache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;确保 origin 返回合理的 Cache-Control 与 ETag/Last-Modified。
若用 Varnish:设置默认TTL、后端池与 health probe,在 VCL 中用 recv() 判定 Purge/Refresh 策略,举例:
sub vcl_recv {
if (req.method == "BAN") { return (synth(200, "Banned")); }
return (hash);
}
按资源类型设定 TTL:静态资源(js/css/img)TTL >=7d,版本化资源长期缓存,动态接口短缓存或禁用缓存。
采用 Cache-Control、Surrogate-Key(或自定义 header)实现按内容粒度失效;实现主动清理接口:在管理端调用边缘的 purge/ban API。
实现回源策略:使用 stale-if-error 与 proxy_cache_use_stale 配合,保证 origin 故障时依旧能提供缓存内容。
HAProxy 基本配置:frontend 对外接入,设置 ssl cert 与 http to backend 转发;backend 定义多台边缘节点,配置 health_check:
backend web-backend balance roundrobin server edge1 10.0.0.11:80 check server edge2 10.0.0.12:80 check
Keepalived 配置浮动 IP,设置 VRRP 优先级实现双机热备:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
virtual_ipaddress { 1.2.3.4 }
}
可扩展:在多个 DC 部署同样栈,DNS 使用地理调度或 Anycast(高级选项)实现全球分发。
推荐在边缘或 HAProxy 处终止 TLS,用 certbot 自动续期证书并在 HAProxy/Nginx reload 后热加载证书。
开启 HTTP/2 在 Nginx 或 HAProxy(2.0+),并考虑启用 QUIC/HTTP3(使用支持 QUIC 的 Nginx 或 Caddy/OpenResty 的实验模块)。
注意:QUIC 需 UDP 转发与防火墙放行 443/UDP,检测 CDN 前端是否支持。
静态内容使用对象存储(MinIO/S3)+ CDN 边缘缓存,自动化同步 origin 到对象存储:ci 流程上传并生成版本化 URL。
若使用自托管边缘节点,使用 rsync + cron 或使用分布式文件系统(GlusterFS/MinIO)保持文件一致性,避免缓存不一致。
回源负载:设置 HAProxy 将回源请求分发到多个源站,配置更细粒度的 health check 并监控 origin QPS/latency。
监控项:缓存命中率、回源流量、响应时间、错误率、HAProxy 后端健康、Keepalived 故障转移次数。
设置告警:当缓存命中率下降或 5xx 增加时自动告警并触发脚本回滚或切换流量到备用池。
发布策略:先灰度部署到一部分边缘节点,观测缓存命中与回源,再全量下发;提供自动回滚机制和 purge API。
问:如何快速验证缓存与负载均衡是否生效?
答:使用 curl 查看响应头(Age、X-Cache、Via、X-Backend)以判断是否命中缓存;在 HAProxy 上查看统计页面(stats)或 haproxyctl,模拟单节点下线看流量是否被切换;用 ab/vegeta 压测检查回源请求量下降与响应时间改善。
问:缓存失效和持久化如何设计以避免用户看到旧内容?
答:对频繁更新内容使用版本化 URL 或引入 Surrogate-Key+Purge API 精确失效;静态资源使用长期 TTL 并通过文件名版本控制;必须同步对象存储与边缘并保证 Purge 操作是幂等且有回退机制。
问:如果一个边缘节点宕机,如何保证服务不受影响?
答:通过 HAProxy 的 health check 自动剔除故障节点,Keepalived 提供前端浮动 IP 冗余,多节点部署保证缓存有备份,配置 proxy_cache_use_stale 在 origin 不可用时返回旧缓存。结合监控自动重启或调度替换实例,确保可用性。