找回密码
 立即注册

QQ登录

只需一步,快速开始

varnish负载均衡及故障自动切换(转载)

环境:有四台WEB,
WEB1-3为提供 www.test.com的后端服务
WEB1-2为负载均衡根据服务器情况设置权重
WEB3为健康状态检测后的备份机 意思就是如果访问WEB1-2其中一台机器出现问题的问题那么转向WEB3服务器再访问
WEB4为theme.abc.com的后端服务器
  1. backend web1 {
  2.   .host = "192.168.0.1";
  3.   .port = "80";
  4. }
  5. backend web2 {
  6.   .host = "192.168.0.2";
  7.   .port = "80";
  8. }
  9. backend web3 {
  10.   .host = "192.168.0.3";
  11.   .port = "80";
  12. }
  13. backend web4 {
  14.   .host = "192.168.0.4";
  15.   .port = "80";
  16. }                           

  17. #负载轮询机制
  18. director default random {
  19.   {
  20.     .backend = web1;
  21.     .weight = 200;  }
  22.     {
  23.       .backend = web2;
  24.       .weight = 300;  }
  25. }
  26. #允许清理缓存控制
  27. acl purge {
  28.   "localhost";
  29.   "127.0.0.1";
  30.   "192.168.0.0"/26;
  31. }
  32. sub vcl_recv {
  33.   if (req.request == "PURGE") {
  34.     if (!client.ip ~ purge) {
  35.       error 405 "Not allowed.";
  36.     }
  37.     elseif(req.url ~ "\.(php|cgi)($|\?)") {
  38.       pass;
  39.     }
  40.     else {
  41.       lookup;
  42.     }
  43.   }
  44. #设置健康状态检测机制,这里实际是使用了一个备份功能
  45.   if((req.http.host ~"^(www.|bbs.)?test.com")&&(req.restarts == 0))  {
  46.     set req.backend = default;
  47.   } elseif(req.restarts == 1) {
  48.     set req.backend = web3;
  49.   }
  50. #另外一个域名的配置
  51.   if(req.http.host ~"^(theme.|special.)?abc.com") {
  52.     set req.backend = web4;
  53.   }
  54. #定义一些缓存的内容 PHP 不缓存
  55.   if (req.request != "GET" && req.request != "HEAD")
  56.   {
  57.     pipe;
  58.   }
  59.   elseif (req.url ~ "\.(php|cgi)($|\?)")
  60.   {
  61.     pass;
  62.   }
  63.   elseif (req.http.Authenticate || req.http.Authorization) {
  64.     pass;
  65.   }
  66.   lookup;
  67. }                                                                     

  68. sub vcl_hit
  69. {
  70.   if (req.request == "PURGE") {
  71.     set obj.ttl = 0s;
  72.     error 200 "Purged.";
  73.   }                           

  74.   if (!obj.cacheable)
  75.   {
  76.     pass;
  77.   }                  

  78.   if (obj.http.Vary)
  79.   {
  80.     unset obj.http.Vary;
  81.   }
  82. }                       

  83. sub vcl_miss
  84. {
  85.   if (req.request == "PURGE") {
  86.     error 404 "Not in cache.";
  87.   }
  88. }
  89. #定义hash的值 这个跟清空缓存有很大的关系
  90. #处理压缩情况的内容
  91. sub vcl_hash {
  92.   set req.hash += req.url;
  93.   if (req.http.host) {
  94.     set req.hash += req.http.host;
  95.   } else {
  96.     set req.hash += server.ip;
  97.   }
  98.   if ( req.http.Accept-Encoding ){
  99.     if (req.url ~ "\.(jpg|jpeg|png|gif|rar|zip|gz|tgz|bz2|tbz|mp3|ogg|swf|exe|flv|avi|rmvb|rm|mpg|mpeg|pdf)$") {
  100.     } else {
  101.       set req.hash += req.http.Accept-Encoding;
  102.     }
  103.   }
  104.   hash;
  105. }

  106. sub vcl_fetch
  107. {
  108. #轮询机制的一部分,定义什么时候就restart
  109.   if ((obj.status == 500 || obj.status == 501 ||  obj.status == 502 ||  obj.status == 503) && req.restarts < 2) {
  110.     restart;
  111.   }
  112.   if (!obj.cacheable)
  113.   {
  114.     pass;
  115.   }
  116. #决定哪些头不缓存
  117.   if (obj.http.Pragma ~ "no-cache" || obj.http.Cache-Control ~ "no-cache" || obj.http.Cache-Control ~ "private") {
  118.     pass;
  119.   }

  120.   if (obj.http.Set-Cookie)
  121.   {
  122.     pass;
  123.   }
  124. #定义不同内容的缓存时间
  125.   if (req.request == "GET" && req.url ~ "\.(txt|js|css|html|htm)$") {
  126.     set obj.ttl = 600s;
  127.   }
  128.   else {
  129.     set obj.ttl = 10d;
  130.   }
复制代码

本教程由无限星辰工作室CRX349独家整理和提供,转载请注明地址,谢谢。本文地址:https://xmspace.net/thread-86-1-1.html
无限星辰工作室  好集导航 Discuz全集下载  星辰站长网  集热爱361  一品文学  手机小游戏合集   海外空间网 星辰api  星辰支付二维码管理平台 LOT智能硬件聚合平台 阿里云服务器 腾讯云服务器
服务Discuz!建站|DiscuzQ配置|二开|小程序|APP|搬家|挂马清理|防护|Win/Linux环境搭建|优化|运维|
服务理念:专业 诚信 友好QQ842062626 服务项目 Q群315524225

发表于 2013-9-15 22:12:01 | 显示全部楼层 |阅读模式

回复 | 使用道具 举报

该帖共收到 0 条回复!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

美图秀

    • 自建远程桌面服务器 rustdesk
    • Discuz!x3.4 账号保镖 自动冻结账号无效解
    • PVE换主板后 网络丢失解决方法
    • Kvm 虚拟机迁移到PVE里面
    • Discuz!x3,4 阿里云DCDN配置获取客户端ip
拖动客服框
Online Service
点击这里给我发消息
点击这里联系我们
微信扫一扫
在线客服
快速回复 返回顶部 返回列表