如何配置Varnish 4.0实现多域名共享同一缓存
Varnish 4.0 实现多域名同URL共享缓存的配置方案
Varnish默认会将Host请求头纳入缓存哈希计算,所以site1.com/page/和site2.com/page/会生成不同的缓存键,导致重复缓存。要让同URL的请求共享缓存,需要修改vcl_hash子例程,排除Host头,仅基于URL和其他影响内容的关键参数生成哈希。
具体配置修改
在你的VCL配置中添加或覆盖vcl_hash子例程:
sub vcl_hash { # 以请求URL作为哈希核心 hash_data(req.url); # 加入Accept-Encoding头,确保不同编码格式的请求不共享缓存 if (req.http.Accept-Encoding) { hash_data(req.http.Accept-Encoding); } # 若站点存在用户身份相关的Cookie(如登录态),需加入哈希避免缓存混淆 # 示例:仅提取SESSIONID相关Cookie片段 # if (req.http.Cookie ~ "SESSIONID=") { # hash_data(regsub(req.http.Cookie, "^.*?(SESSIONID=[^;]+).*$", "\1")); # } # 不加入Host头,实现多域名同URL请求共享缓存 return (lookup); }
关键注意事项
- 确认后端Nginx不会根据
Host头返回差异化内容,否则共享缓存会导致内容错误。 - 如果站点有用户个性化内容(如登录后显示专属信息),必须将对应的Cookie纳入哈希计算,否则会出现缓存污染(比如游客看到登录用户的内容)。
- 修改配置后,需要重启Varnish服务使设置生效。
内容的提问来源于stack exchange,提问作者Kash
相关产品推荐
相关产品推荐

