上次发过一个varnish的配置文件,在测试环境下调试后,有了不少的修改,所以从新传了一份,看了我之前画得那个流程图的话应该还是很容易理解的吧!嘿嘿

 
  1. #这个是varnish的VCL配置文件,保存于DIR/varnish/etc/varnish/目录中。主要用于定义varnish接到请求后的处理方式和请求的方向。  
  2. #定义后台服务器  
  3. backend web01{  
  4.  .host = "192.168.10.239"; #后台服务器的IP  
  5.  .port = "80";   #端口  
  6.  .connect_timeout = 1s;  #连接超时时间  
  7.  .first_byte_timeout = 5s; #  
  8.  .between_bytes_timeout = 2s; #两次对服务器请求的间隔时间  
  9.  .probe = {   #定义对后台服务器的探针检测  
  10.   .url = "/";  #检测的路径  
  11.   .timeout = 0.3s; #检测超时时间  
  12.   .window = 8;    
  13.   .threshold = 3;  
  14.   .initial = 3;  
  15.  }  
  16. }  
  17. backend web02{  
  18.  .host = "192.168.10.243";  
  19.  .port = "80";  
  20.  .connect_timeout = 1s;  
  21.  .first_byte_timeout = 5s;  
  22.  .between_bytes_timeout = 2s;  
  23.  .probe = {  
  24.   .url = "/";  
  25.   .timeout = 0.3s;  
  26.   .window = 8;  
  27.   .threshold = 3;  
  28.   .initial = 3;  
  29.  }  
  30. }  
  31. #定义后台服务器组,并利用Round-Robin方式进行轮询。  
  32. director load round-robin {  
  33.  {  
  34.    .backend = web01;  
  35.  }  
  36.  {  
  37.   .backend = web02;  
  38.  }  
  39. }  
  40.  
  41. #定义可以对varnish缓存进行清理的用户  
  42. acl purge{  
  43.  "localhost";  
  44. }  
  45.  
  46.  
  47. sub vcl_recv{  
  48.  if (req.request == "PURGE"){  
  49.   if (!client.ip ~ purge){  
  50.    error 405 "Not allowed.";  
  51.   }  
  52.   return (lookup);  
  53.  }  
  54.  if (req.http.host ~ "192.168.10.245"){  
  55.   set req.backend = load;  
  56.   }  
  57.  if (req.restarts == 0){  
  58.   if (req.http.x-forwarded-for) {  
  59.    set req.http.X-Forwarded-For =   
  60.    req.http.X-Forwarded-For "," client.ip;  
  61.   }  
  62.   else {  
  63.    set req.http.X-Forwarded-For = client.ip;  
  64.   }  
  65.  }  
  66.  if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "OPTIONS" && req.request != "DELETE") {  
  67.   return (pipe);  
  68.  }  
  69.  elseif (req.request != "GET" && req.request != "HEAD") {  
  70.   return (pass);  
  71.  }  
  72.  elseif  ((req.request=="GET" || req.request=="HEAD")&& req.url ~ "\.(png|gif|jpeg|swf|css|js|jpg)$"){  
  73.   return (lookup);  
  74.  }  
  75.  else {  
  76.   return (pipe);  
  77.  }  
  78.  if (req.http.Accept-Encoding){   #更改主机头提高缓存命中率  
  79.   if(req.url ~"\.(jpg|jpge|png|gif)$"){  
  80.    #No point in compressing these  
  81.    remove req.http.Accept-Encoding;  
  82.   }  
  83.   elseif (req.http.Accept-Encoding ~ "gzip"){  
  84.    set req.http.Accept-Encoding = "gzip";  
  85.   }  
  86.   elseif (req.http.Accept-Encoding ~ "deflate"){  
  87.    set req.http.Accept-Encoding = "deflate";  
  88.   }  
  89.   else{  
  90.    #unknow algorithm  
  91.    remove req.http.Accept-Encoding;  
  92.   }  
  93.  }  
  94. }  
  95. sub vcl_pipe {  
  96.  return (pipe);  
  97. }  
  98. sub vcl_pass {  
  99.  return (pass);  
  100. }  
  101. sub vcl_hash {  
  102.  set req.hash += req.url;  
  103.  if (req.http.host) {  
  104.   set req.hash += req.http.host;  
  105.  }  
  106.  else {  
  107.   set req.hash += server.ip;  
  108.  }  
  109.  return (hash);  
  110. }  
  111. sub vcl_hit{  
  112.  if (!obj.cacheable){  
  113.   return (pass);  
  114.  }   
  115.  else {  
  116.  return (deliver);  
  117.  }  
  118. }  
  119. sub vcl_miss{  
  120.  return (fetch);  
  121. }  
  122. sub vcl_fetch{  
  123.  if (!beresp.cacheable) {  
  124.   return (pass);  
  125.  }  
  126.  elseif (beresp.http.Set-Cookie) {  
  127.   return (pass);  
  128.  }  
  129.  else {  
  130.   return (deliver);  
  131.  }  
  132. }  
  133. sub vcl_deliver {  
  134.  return (deliver);  
  135. }  
  136. sub vcl_error {  
  137.  set obj.http.Content-Type = "text/html; charset=utf-8";  
  138.  synthetic {"  
  139. <?xml version="1.0" encoding="utf-8" ?>  
  140. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
  141. <html>  
  142.  <head>  
  143.   <title>"{ obj.status " " obj.response }"</title>  
  144.  </head>  
  145.  <body>  
  146.   <h1>Error "{ obj.status "" obj.response }"</h1>  
  147.   <p>"{ obj.response}"</p>  
  148.   <h3>Guru Meditation:</h3>  
  149.   <p>XID: "{req.xin}" </p>  
  150.   <hr>  
  151.   <p>Varnish cache server</p>  
  152.  </body>  
  153. </html>  
  154. "};  
  155.  return (deliver);  
  156.  
  157. }  
  158.