热门标签 | 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时代过期时间条件式条件式请求:客户端发请求时给缓存服务器,先查本地缓存是否命 ... [详细]
  • 高性能反向代理服务器Varnish安装与使用
    别问了,代 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 分布式系统关注点——360°全方位解读「缓存」
    如果这是第二次看到我的文章,欢迎文末扫码订阅我个人的公众号(跨界架构师)哟~  本文长度为3578字,建议阅读10分钟。坚持原创,每 ... [详细]
  • Varnish搭建CDN内容分发网络
    概述:1.CDN内容分发网络CDN的全称是ContentDeliveryNetwork,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据 ... [详细]
  • vcl_recv()Calledafterarequestisreceivedfromthebrowser,butbeforeitisprocessed.接收 ... [详细]
  • [1].主机与主机之间通讯的三要素有什么?IP地址、子网掩码、IP路由[2].网络排错常用思路及每一步的作用或目的。先ping回环地址,检查TCPIP ... [详细]
  • 架构的高可用高性能keepalived和varnish
    架构的高可用高性能keepalived和varnish ... [详细]
  • NCACHE是基于NGINX的WEB服务器模型构件起来的缓存系统,是SINA(新浪)公司的开源产品.起初的目的是为了提升缓存响应速度而开发的,因为SQU ... [详细]
  • 九、提高 Web 服务器的性能
    九、提高Web服务器的性能谷歌将更新老化的网络协议作为其快速网络计划的首要任务之一。随着w ... [详细]
  • Firefox火狐浏览器关闭到http://detectportal.firefox.com的流量问题解决办法
    本文介绍了使用Firefox火狐浏览器时出现关闭到http://detectportal.firefox.com的流量问题,并提供了解决办法。问题的本质是因为火狐默认开启了Captive portal技术,当连接需要认证的WiFi时,火狐会跳出认证界面。通过修改about:config中的network.captive-portal-service.en的值为false,可以解决该问题。 ... [详细]
  • Redis布隆防击穿实战如何解决布隆值在被刷新时出现的真空期
    大促、抢券、抢红包系统在面临大促时,会面临笔直上升的流量访问趋势。如果流量是“慢慢爬升”,这对系统的考验其实是很一般的。系统最怕的就是笔直上升的流量直 ... [详细]
  • Docker部署Prometheus+Grafana监控系统
    Docker部署Prometheus+Grafana监控系统-Prometheus简介Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。 ... [详细]
author-avatar
刘刘刘刘刘志锋_506
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有