Varinsh 安装与配置

一: HTTP相关内容

  1. 常见 HTTP 状态码
200:成功
206:请求体太大,分段请求
301:永久重定向
302:暂时重定向
304:浏览器缓存文件内容没发生改变,可以继续使用
403:网站服务器没有权限读取该请求内容
404:请求页面找不到
405:禁用的请求方法
5XX:服务器内部发生错误
  1. HTTP 头部信息
通用
    Connection:close|keep-alive
    Date:日期时间
    Host:请求的主机
    paragma:no-cache
    Via:请求或响应消息,在客户端和服务器端之间所经过的代理
    Transfer-Encoding:消息主机的传输编码方式,chunked表示采用块编码的方式
 请求
    If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它
    If-None-Match
    Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
    User-Agent:客户端浏览器类型
     Host:请求的主机
    Accept-Encoding:接受的编码方式
    Accept-Language:接受的自然语言
    Accept-Charest:接受字符集
    Authorization:服务器发送www-authenticat时,客户通过此首部提供认证信息
 响应
    Etag:内容的标签
    Location:重定向后的新位置
    Server:服务器软件信息
    WWW-Authenticate:要求对客户端进行认证
 实体
    Content-Encoding
    Content-Language
    Content-Length:实体大小
    Content-Type:内容的MIME格式
    Expires:应该在什么时候认为文档已经过期,从而不再缓存它
    Last-Modified:文档最后改动时间
  1. 缓存处理的具体步骤
接受请求
解析请求(代理的功能)
查询缓存(检查本地缓存中是否存在对方请求的内容的副本)
副本的新鲜度检测(检查本地缓存的副本是否为最新版本)
构建响应(代理的功能)
发送响应
记录日志

二: varinsh

  1. varinsh 程序架构


Management 进程:编译VCL并应用新配置、监控varnish、初始化varnish,并提供一个CLI。
Child/Cache 线程:
    Acceptor:接收新的连接请求;
    Worker:用于处理并响应用户请求;
    Expiry:从缓存中清理过期cache object
    日志进程:Shared Memory Log,  共享内存内存日志大小一般90MB;分为两部分:前一部分为计数器、后一部分为客户请求相关的数据。
    varnish提供了多个不同的工具如varnishlog、varnishncsa或varnishstat等来分析共享内存日志中的信息并能够以指定的方式进行显示
  1. Vcl内置函数和处理流程(状态引擎)
    vcl内置函数:
vcl_recv:用于接受和处理请求。当请求到达并成功接收后被调用,通过判断请求的数据来决定如何处理请求。例如如何响应、怎么响应、使用哪个后端服务器等。
vcl_fetch(vcl_backend_response):根据服务器端的响应作出缓存决策,如判断获取的内容来决定是将内容放入缓存,还是直接返回给客户端。
vcl_pipe:对于无法理解的用户请求,将请求直接发往后端主机;
vcl_hash:自定义hash生成时的数据来源
vcl_pass:用于将请求直接传递至后端主机,后端主机在应答数据后将应答数据发送给客户端,但不进行任何缓存。
vcl_hit:从缓存中查找到缓存对象时要执行的操作;
vcl_miss:从缓存中查找不到缓存对象时要执行的操作;
vcl_deliver:将用户请求的内容响应给客户端时用到的方法; 
vcl_error:在varnish端合成错误响应而时;

vcl配置语法:

(1) //, #, /*comment*/用于注释;
(2) sub $NAME 用于定义函数;
(3) 不支持循环;
(4) 有众多内置变量;
(5) 支持终止语句,没有返回值;
(6) “域”专用语言;
(7) 操作符: =, ==, ~, !, &&, ||
vcl状态转换图
  1. varnish4 安装
https://varnish-cache.org/releases/install_redhat.html#install-redhat #CentOS 安装方法地址
varnish4安装:
curl -s https://packagecloud.io/install/repositories/varnishcache/varnish41/script.rpm.sh | sudo bash
yum -y install varnish 
  1. varnish4 规则配置示例
vcl 4.0;
#允许清除缓存的IP地址
import std;
import directors;

acl purgers {
    "127.0.0.1";
    "192.168.71.0"/24;
}
probe healthcheck {
    .url = "/index.html";
    .interval = 3s;
    .timeout = 1s;
    .window = 5;
    .threshold = 3;
}
#后端服务器1
backend web1 {
    .host = "192.168.48.31";
    .port = "80";
    .probe = healthcheck;
}
#后端服务器2
#backend web2 {
#   .host = "192.168.48.32";
#   .port = "80";
#   .probe = healthcheck;
#}

sub vcl_init {
    new vdir = directors.round_robin();
    vdir.add_backend(web1);
    #vdir.add_backend(web2);
    return (ok);
}

sub vcl_recv {
    #添加原来请求的地址到X-Forwarded-For
    #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;
    #}


    #不在acl列表内的IP不允许清除缓存
    if (req.method == "PURGE") {
        if (!client.ip ~ purgers) {
            return(synth(405,"Method not allowed!"));
        }
        return(purge);
    }
    if (req.url ~ "^[^?]*\.(7z|avi|bmp|bz2|css|csv|doc|docx|eot|flac|flv|gif|gz|ico|jpeg|jpg|js|less|mka|mkv|mov|mp3|mp4|mpeg|mpg|odt|otf|ogg|ogm|opus|pdf|png|ppt|pptx|rar|rtf|svg|svgz|swf|tar|tbz|tgz|ttf|txt|txz|wav|webm|webp|woff|woff2|xls|xlsx|xml|xz|zip)(\?.*)?$") {
        unset req.http.cookie;
    }
    #不缓存about.html页面
    if (req.url ~ "^[^?]*\.php(\?.*)?$") {
        return(pass);
    }
}

sub vcl_hash {
#set req.hash = req.url;
#   if (req.http.Accept-Encoding ~ "gzip") {
#       set req.hash += "gzip"
#   }
#   return (hash);
}
sub vcl_purge {
    return (synth(200, "Purged"));
}

sub vcl_backend_response {
    #不同的文件类型设置不同时长度缓存时间
    if (bereq.url ~ "\.(jpg|jpeg|gif|png|css|js|)$") {
        set beresp.ttl = 86400s;
    }
    if (bereq.url ~ "\.(html|htm)$") {
        set beresp.ttl = 300s;
    }
    if (bereq.url ~ "^[^?]*\.(7z|avi|bmp|bz2|css|csv|doc|docx|eot|flac|flv|gif|gz|ico|jpeg|jpg|js|less|mka|mkv|mov|mp3|mp4|mpeg|mpg|odt|otf|ogg|ogm|opus|pdf|png|ppt|pptx|rar|rtf|svg|svgz|swf|tar|tbz|tgz|ttf|txt|txz|wav|webm|webp|woff|woff2|xls|xlsx|xml|xz|zip)(\?.*)?$") {
        #set beresp.do_gzip = false;
        unset bereq.http.cookie;
    }
}

sub vcl_deliver {
    #添加缓存命中显示
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT from " + server.ip;
    } else {
        set resp.http.X-Cache = "MISS";
    }
}
  1. 测试结果
实验环境:
  varnish 服务器IP:192.168.71.11;192.168.48.133
  web1:192.168.48.31
  web2:192.168.48.32
第一次请求
第二次请求
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,673评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,112评论 4 61
  • 昨天看到的新闻全球爆发的电脑勒索病毒,蔓延全球,立刻转发到公司群里,今天一早就收到,技术主管在群里发出来的应对勒...
    Jenny日记阅读 320评论 2 2
  • 今晚的安排是学篇英文课文,外加外音组的英文朗读,以及写一篇文。可是晚上回来后,有些头痛。忍着做了晚餐,饭后,只想躺...
    明媚Sopy阅读 248评论 1 2
  • 主队列: 全局队列: 创建一个并行队列: 调度组: 阻塞执行: 控制代码只执行一次(例如单例): 延时执行: 重复...
    devdawei阅读 195评论 0 0