热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

varnish缓存三:VCL配置示例

我公司当前线上varnish配置示例:#backenddefault{#.host127.0.0.1;#.port8080;#}backends360_01{.

我公司当前线上varnish配置示例:

#backend default {

#.host = "127.0.0.1";

#.port = "8080";

#}


backend s360_01 {

.host = "192.168.0.114";

.port = "18286";

.probe = {

       .url = "/";

       .interval = 5s;

       .timeout = 1 s;

       .window = 5;

       .threshold = 3;

}

}


backend s360_02 {

.host = "192.168.0.115";

.port = "18286";

.probe = {

       .url = "/";

       .interval = 5s;

       .timeout = 1 s;

       .window = 5;

       .threshold = 3;

}

}


backend swdj_01 {

.host = "192.168.0.114";

.port = "8092";

.probe = {

       .url = "/";

       .interval = 5s;

       .timeout = 1 s;

       .window = 5;

       .threshold = 3;

}

}


backend swdj_02 {

.host = "192.168.0.115";

.port = "8092";

.probe = {

       .url = "/";

       .interval = 5s;

       .timeout = 1 s;

       .window = 5;

       .threshold = 3;

}

}


backend bf_01 {

.host = "192.168.0.111";

.port = "18282";

.probe = {

       .url = "/";

       .interval = 5s;

       .timeout = 1 s;

       .window = 5;

       .threshold = 3;

}

}


backend bf_02 {

.host = "192.168.0.112";

.port = "18282";

.probe = {

       .url = "/";

       .interval = 5s;

       .timeout = 1 s;

       .window = 5;

       .threshold = 3;

}

}


backend zsoft_01 {

.host = "192.168.0.111";

.port = "8090";

.probe = {

       .url = "/";

       .interval = 5s;

       .timeout = 1 s;

       .window = 5;

       .threshold = 3;

}

}


backend zsoft_02 {

.host = "192.168.0.112";

.port = "8090";

.probe = {

       .url = "/";

       .interval = 5s;

       .timeout = 1 s;

       .window = 5;

       .threshold = 3;

}

}


director s360 random {

{.backend = s360_01; .weight = 5;}

{.backend = s360_02; .weight = 5;}

}


director wdj random {

{.backend = swdj_01; .weight = 5;}

{.backend = swdj_02; .weight = 5;}

}


director bf random {

{.backend = bf_01; .weight = 5;}

{.backend = bf_02; .weight = 5;}

}


director zsoft random {

{.backend = zsoft_01; .weight = 5;}

{.backend = zsoft_02; .weight = 5;}

}


acl local{

"localhost";

"127.0.0.1";

"192.168.0.0"/24;

}


sub vcl_recv {


if(req.url ~ "^/s360/") {

set req.backend = s360;

}else if(req.url ~ "^/swdj/"){

set req.backend = wdj;

}else if(req.url ~ "^/bf/"){

set req.backend = bf;

}else if(req.url ~ "^/zsoft/"){

set req.backend = zsoft;

#}else{

#set req.backend = default.

}


if (req.http.x-forwarded-for) {

set req.http.X-Forwarded-For =

req.http.X-Forwarded-For + ", " + client.ip;

} else {

set req.http.X-Forwarded-For = client.ip;

}


if (req.http.Accept-Encoding) {

if (req.url ~ "\.(jpg|png|gif|jpeg|flv)" ) {

remove req.http.Accept-Encoding;

remove req.http.COOKIE;

} else if (req.http.Accept-Encoding ~ "gzip") {

set req.http.Accept-Encoding = "gzip";

} else if (req.http.Accept-Encoding ~ "deflate") {

set req.http.Accept-Encoding = "deflate";

} else {

remove req.http.Accept-Encoding;

}

}


if (req.request != "GET" &&

req.request != "HEAD" &&

req.request != "PUT" &&

req.request != "POST" &&

req.request != "TRACE" &&

req.request != "OPTIONS" &&

req.request != "DELETE") {

       return (pipe);

}

   if (req.request != "GET" && req.request != "HEAD") {

return (pass);

}


if(req.http.Authenticate || req.http.Authorization) {

return (pass);

}


if(req.request == "PURGE"){

if(!client.ip ~ local){

error 405 "Not Allowed.";

}

return (lookup);

}


if(req.request == "GET" && req.url ~ "\.(jpg|png|gif|swf|jpeg|ico|js|mp4|css)$"){

unset req.http.COOKIE;

set req.url = regsub(req.url, "\?.*$", "");

}


set req.grace = 15s;

return (lookup);

}


sub vcl_pipe {

return (pipe);

}


sub vcl_pass {

return (pass);

}


sub vcl_hash {

hash_data(req.url);

if (req.http.host) {

hash_data(req.http.host);

} else {

hash_data(server.ip);

      }

return (hash);

}


sub vcl_miss {

if(req.request == "PURGE") {

error 404 "not in cache.";

}

return (fetch);

}


sub vcl_hit {

if(req.request == "PURGE"){

purge;

error 200 "purged";

}

return (deliver);

}


sub vcl_fetch {


if (beresp.http.Pragma ~"no-cache" ||

beresp.http.Cache-Control ~"no-cache" ||

beresp.http.Cache-Control ~"private") {

return (deliver);

}


if (beresp.status == 404 || beresp.status == 300){

error 404;

}


if (req.request == "GET" && req.url ~ "^/s360(.*)$") {  

   set beresp.ttl = 3600s;  

}


if (req.request == "GET" && req.url ~ "^/swdj(.*)$") {

           set beresp.ttl = 43200s;

       }


if (req.request == "GET" && req.url ~ "^/bf(.*)$") {

           set beresp.ttl = 43200s;

       }


if (req.request == "GET" && req.url ~ "^/zsoft(.*)$") {

           set beresp.ttl = 43200s;

       }


if (req.request == "GET" && req.url ~ ".(html|htm)$"){

set beresp.ttl = 1d;

}


if (req.request == "GET" && req.url ~ "\.(png|xsl|xml|pdf|ppt|doc|docx|chm|rar|zip|bmp|jpeg|swf|ico|mp3|mp4|rmvb|ogg|mov|avi|wmv|swf|txt|png|gif|jpg|css|js|html|htm)$") {  

set beresp.ttl = 7d;  

}


set beresp.grace = 30m;

return(deliver);

}


sub vcl_deliver {

set resp.http.x-hits = obj.hits;

if(obj.hits > 0){

set resp.http.X-Cache = " HIT 360";

}else{

set resp.http.X-Cache = "MISS 360";

}

unset resp.http.X-Powered-By;

unset resp.http.Server;

return (deliver);

}


sub vcl_error {

    set obj.http.Content-Type = "text/html; charset=utf-8";

    set obj.http.Retry-After = "5";

    synthetic {"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

 

   

 

 

   

Error "} + obj.status + " " + obj.response + {"

   

"} + obj.response + {"

   

Guru Meditation:

   

XID: "} + req.xid + {"

   


   

Varnish cache server

 

"};

    return (deliver);

}


sub vcl_init {

  return (ok);

}


sub vcl_fini {

  return (ok);

}


本文出自 “无名小卒” 博客,请务必保留此出处http://breezey.blog.51cto.com/2400275/1339435


推荐阅读
  • varnish 测试
    安装通过epel源yum安装[rootlocalhostvarnish]#rpm-qlvarnishetclogrotate.dvarnishetcvarnishetcvar ... [详细]
  • 一、原理用server1当作缓存的,主机请求server1,server1通过varnish设置,访问server2,将se ... [详细]
  • varnish 缓存服务器
    varnish缓存服务器局部性:空间局部时间局部http1.1时代过期时间条件式条件式请求:客户端发请求时给缓存服务器,先查本地缓存是否命 ... [详细]
  • 运维入门
    2019独角兽企业重金招聘Python工程师标准本文内容遵从CC版权协议转载请注明出自oschina.netedwinaclaublog#运维入门一个 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • EvanWeaver是Twitter服务团队的总工程师,他的主要工作是优化与伸缩性。在QConLondon2009上,他谈到了Twitter的架构&#x ... [详细]
  • Ivearails3app,runningwellfastonherokusbamboostack.Totestwhethermyappworksontheu ... [详细]
  • 分布式系统关注点——360°全方位解读「缓存」
    如果这是第二次看到我的文章,欢迎文末扫码订阅我个人的公众号(跨界架构师)哟~  本文长度为3578字,建议阅读10分钟。坚持原创,每 ... [详细]
  • Varnish搭建CDN内容分发网络
    概述:1.CDN内容分发网络CDN的全称是ContentDeliveryNetwork,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 有关phpfile_exists()函数的文章推荐10篇
    有关phpfile_exists()函数的文章推荐10篇:定义和用法clearstatcache()函数的作用是:清除文件状态缓存。PHP的缓存数据对更快更好的运行函数是非常有利的 ... [详细]
author-avatar
书友80433968_667
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有