阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

玩转 Varnish 缓存代理

221次阅读
没有评论

共计 2420 个字符,预计需要花费 7 分钟才能阅读完成。

Varnish 是互联网架构中重要的缓存代理组件。Varnish 一般跑在流量入口处,作为最前端一道防御,非常重要。

玩转 Varnish 缓存代理

虽然 Varnish 并不像 Nginx 那么流行。Varnish 就像 Nginx 一样稳定高效,如果使用得当,能极大提升整体服务性能、并且降低资源消耗。

 

常见互联网架构中的多级缓存

  1. 将内容推送到用户身边的 CDN 缓存
  2. 类似 Varnish 的缓存代理
  3. 应用层缓存 Redis,Memcache
  4. 数据库缓存

 

为什么缓存代理很重要

  1. 一些事实:内容的变动比不变少得多;用户内容最终一致的容忍性。基于这 2 个事实,可以节约大量重复计算和资源。
  2. 延迟一般情况下对用户体验、商业业务的影响很大。所有互联网公司都在努力降低延迟,提升用户体验。
  3. CDN 有些情况下会大量回源,比如清空 CDN 缓存的时候,应用架构本身需要能抗 100% 流量的能力。

 

Varnish 的几个功能

 

1. HTTP Header 的修改

请求头的修改

  1. unset req.http.cookie;
  2. set req.http.X-EOOD ="EOOD";

返回头的修改

  1. unset beresp.http.Set-Cookie;
  2. set beresp.http.Cache-Control="public, max-age=31536000";

 

2. 内容在 Varnish 状态的暴露

缓存的命中与否

  1. if(obj.hits >0){
  2. set resp.http.X-Cache="HIT";
  3. }else{
  4. set resp.http.X-Cache="MISS";
  5. }

 

3. 负载均衡

Varnish 也支持后端服务器的轮询之类的简单负载均衡,但是慎用。

 

4. 后端保护和容错

这个功能可能有些人没有注意到,但是确实非常有用的功能,在后端挂掉的时候,只读页面仍然会成功返回给客户。

  1. set req.grace =48h;

 

5. 访问控制

可以根据规则路由或者屏蔽某些访问,比如:

  1. req.http.User-Agent
  2. req.http.X-Forwarded-For
  3. req.http.referer
  4. ...

简单密码保护:Basic Auth

  1. if(! req.http.Authorization~"Basic XXXXXXX"){
  2. error 401"Restricted";
  3. }

 

6. 多个后端合并

定义多个后端

  1. backend ads {
  2. .host ="ads.eood.cn";
  3. .connect_timeout =1s;
  4. .first_byte_timeout =30s;
  5. .between_bytes_timeout =5s;
  6. }
  7. backend blog {
  8. .host ="blog.eood.cn";
  9. .connect_timeout =1s;
  10. .first_byte_timeout =30s;
  11. .between_bytes_timeout =5s;
  12. }

根据域名、URL 或者其他规则路由到不同的后端,这些规则可以是用户 IP, 甚至是用户 Cookie。

  1. sub vcl_recv {
  2. if(req.http.host ~"ads"|| req.url ~"^/ads/"){
  3. set req.backend = ads;
  4. ...
  5. }elseif(eq.http.host ~"blog"){
  6. set req.backend = blog;
  7. }
  8. }

 

7. 根据规则进行缓存

  1. set beresp.ttl =120s;

 

Varnish 运维常用命令

请求 URL 热点排名, 根据热点优化缓存策略

  1. varnishtop -i rxurl

实时请求日志

  1. varnishlog

可以通过 grep 进行过滤查看你需要的信息

  1. varnishlog -c | grep 'google'

 

Varnish 的注意事项

防止连接粘滞,假如你有多个不同的后端,不添加这个会导致混乱,估计很多人踩过这个坑:

  1. sub vcl_pipe {
  2. set bereq.http.connection ="close";
  3. }

 

URL 规划

一般缓存代理或者 CDN 都是可以通过配置 URL 规则实现不同 URL 模式使用不同的缓存策略,所以 URL 规划非常重要。
将动态请求和静态请求进行区分;将不同缓存级别的 URL 进行区分。这也有利于根据 URL 进行缓存清理。

 

最后

Varnish 是网站应用或者移动应用必不可少的缓存模块。如果你还没开始使用,就立刻把他加入到现有架构中吧。

缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm

缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm

Varnish Cache 的架构笔记 http://www.linuxidc.com/Linux/2013-10/91016.htm

CentOS 5.8 下 Varnish-2.1.5 的安装配置 http://www.linuxidc.com/Linux/2013-09/89916.htm

RedHat 脚本改用 CentOS 源更新安装 Nginx、PHP 5.3、Varnish http://www.linuxidc.com/Linux/2012-07/65801.htm

利用 Varnish 构建 Cache 服务器笔记 http://www.linuxidc.com/Linux/2012-07/65234.htm

缓存服务 Varnish 安装配置 http://www.linuxidc.com/Linux/2012-07/65228.htm

Varnish 编译安装所需准备 http://www.linuxidc.com/Linux/2012-07/65230.htm

Linux 下 Varnish 缓存的配置优化 http://www.linuxidc.com/Linux/2012-03/56435.htm

Varnish 的详细介绍 :请点这里
Varnish 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-07/119532.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计2420字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中