web缓存服务器varnish-4.1.6的部署及配置详解

1.安装varnish4.1.6
安装依赖

yum install -y autoconf automake jemalloc-devel libedit-devel libtool ncurses-devel pcre-devel pkgconfig python-docutils python-sphinx

安装varnish yum仓库

# rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.1.el7.rpm
# yum install varnish -y

2.设置Varnish参数

# grep "^[a-Z]" /etc/varnish/varnish.params
RELOAD_VCL= # 重新启动服务时是否重新读取VCL并重新编译
VARNISH_VCL_CONF=/etc/varnish/default.vcl # 默认读取的VCL文件
VARNISH_LISTEN_PORT= # 设置监听的端口(默认监听6081端口)
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 # 管理接口监听的地址
VARNISH_ADMIN_LISTEN_PORT= # 管理接口监听的端口
VARNISH_SECRET_FILE=/etc/varnish/secret # 使用的密钥文件
VARNISH_STORAGE="malloc,256M" # 存储文件的大小
VARNISH_USER=varnish # varnish默认用户
VARNISH_GROUP=varnish # varnish默认组

定义VCL backend

# cat /etc/varnish/default.vcl |grep -v "#"

vcl 4.0;

backend web01 {
.host = "192.168.3.12";
.port = "";
}

启动varnish
# systemctl start varnish
# systemctl enable varnish

3.定义VCL 后端的集合 director
VCL 可以把多个 backends 聚合成一个组,这些组被叫做 director,这样可以增强性能和弹力,当组里一个 backend 挂掉后,可以选择另一个健康的 backend。VCL 有多种 director,不同的 director 采用不同的算法选择 backend,主要有以下几种:
a. The random director
Random director 会根据所设置的权值(weight)来选择 backend,.retries 参数表示尝试找到一个 backend 的最大次数,.weight 参数表示权值
b. The round-robin director
Round-robin director 在选择 backend 时,会采用循环的方式依次选择。
c. The client director
Client director 根据 client.identity 来选择 backend,您可以设置 client.identity 的值为 session cookie 来标识 backend。

# vim /etc/varnish/default.vcl
vcl 4.0; # 指明varnish版本
backend web01 { # 定义后端服务器1
.host = "192.168.3.12";
.port = "";
} backend web02 { # 定义后端服务器2
.host = "192.168.3.13";
.port = "";
} import directors; # 定义directors
sub vcl_init { # 定义vcl_init子例程
new cluster1 = directors.round_robin();
cluster1.add_backend(web01);
cluster1.add_backend(web02);
} sub vcl_recv { # 定义vcl_recv子例程
set req.backend_hint = cluster1.backend(); #指定后端directors
}

详情:https://www.varnish-cache.org/docs/4.1/reference/vmod_directors.generated.html#object-hash

4.设置响应是否命中

sub vcl_deliver {                   # 定义子例程
if (obj.hits > ) {
set resp.http.X-Cache = "HIT via" + " " + server.ip;
} else {
set resp.http.X-Cache = "MISS via" + " " + server.ip;
} # 判断如果命中就在http响应首部设置X-Cache为HIT,否则就在http响应首部设置X-Cache为MISS。
}

然后再到页面上访问看一下是否已经生效,可以看到第一次访问的时候是MISS第二次的时候就是HIT了

5.指定某些文件不能查缓存

sub vcl_recv {
if (req.url ~ "^/test.html$") {
return(pass);
} ##定义请求的文件中如果匹配test.html就pass,不查缓存
}

通过测试可以看到连续访问http://192.168.3.198/test.html都是MISS

6.进行健康检查
Varnish可以检测后端主机的健康状态,在判定后端主机失效时能自动将其从可用后端主机列表中移除,而一旦其重新变得可用还可以自动将其设定为可用。为了避免误判,Varnish在探测后端主机的健康状态发生转变时(比如某次探测时某后端主机突然成为不可用状态),通常需要连续执行几次探测均为新状态才将其标记为转换后的状态。
每个后端服务器当前探测的健康状态探测方法通过.probe进行设定,其结果可由req.backend.healthy变量获取,也可通过varnishlog中的Backend_health查看或varnishadm的debug.health查看。

backend web01 {
.host = "192.168.10.132";
.port = "";
.probe = {
.url = "/"; # 指定哪个url需要varnish请求
.timeout = 2s; # 指定超时等待时间
.interval = 5s; # 指定检查时间间隔
.window = ; # 最多尝试5次
.threshold = ; # 至少有3次成功就宣告backend健康
}
} backend web02 {
.host = "192.168.3.13";
.port = "";
.probe = {
.url = "/";
.timeout = 2s;
.interval = 5s;
.window = ;
.threshold = ;
}
}

7.设定缓存时长

sub vcl_backend_response {
if (bereq.url ~ "\.(jpg|jpeg|gif|png)$") {
set beresp.ttl = 2h;
} # 如果url是以图片格式结尾的缓存2小时
if (bereq.url ~ "\.(html|css|js|jsp)$") {
set beresp.ttl = 30m;
} # 如果url是以html|css|js|jsp结尾的缓存30分钟
}

web缓存服务器varnish-4.1.6的部署及配置详解的更多相关文章

  1. 5.Nginx作为web缓存服务器

    Nginx作为web缓存服务器 从0.7.48版本开始,Nginx支持类似Squid的缓存功能.Nginx的web缓存服务主要由proxy_cache相关命令集合fastcgi_cache相关命令集构 ...

  2. 缓存varnish的管理及配置详解

    一 工作原理 在当前主流的Web服务架构体系中,Cache担任着越来越重要的作用.常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键.而最近几年由FreeBSD创始人之一Kamp ...

  3. 2-4、nginx特性及基础概念-nginx web服务配置详解

    Nginx Nginx:engine X 调用了libevent:高性能的网络库 epoll():基于事件驱动event的网络库文件 Nginx的特性: 模块化设计.较好扩展性(不支持模块动态装卸载, ...

  4. Linux NFS服务器的安装与配置详解

    一.NFS服务简介 NFS是Network File System(网络文件系统).主要功能是通过网络让不同的服务器之间可以共享文件或者目录.NFS客户端一般是应用服务器(比如web,负载均衡等),可 ...

  5. java web.xml配置详解(转)

    源出处:java web.xml配置详解 1.常规配置:每一个站的WEB-INF下都有一个web.xml的设定文件,它提供了我们站台的配置设定. web.xml定义: .站台的名称和说明 .针对环境参 ...

  6. Web.xml配置详解(转)

    Web.xml配置详解 Posted on 2010-09-02 14:09 chinaifne 阅读(295105) 评论(16) 编辑 收藏 1 定义头和根元素 部署描述符文件就像所有XML文件一 ...

  7. Linux - CentOS6.5服务器搭建与初始化配置详解(下)

    传送带:Linux - CentOS6.5服务器搭建与初始化配置详解(上) 继续接着上面的安装,安装完后会出现下面界面 点击reboot重启 重启后可以看到下面的tty终端界面  因为这就是最小化安装 ...

  8. 实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解

    注意:这里不会讲到nginx流媒体模块如何安装的问题,只研究rtmp,hls直播和录制相关的nginx服务器配置文件的详细用法和说明.可以对照这些命令详解配置nginx -rtmp服务 一.nginx ...

  9. web.xml配置详解之listener

    web.xml配置详解之listener 定义 <listener> <listener-class>nc.xyzq.listener.WebServicePublishLis ...

随机推荐

  1. 前台ajax传参数,后台spring mvc用对象接受

    第二种方法:利用spring mvc的机制,调用对象的get方法,要求对象的属性名和传的参数名字一致(有兴趣的同学看 springmvc源码) 1.将参数名直接写成对象的属性名 $.ajax({ ur ...

  2. Asp.net+WebSocket+Emgucv实时人脸识别

    上个月在网上看到一个用web实现简单AR效果的文章,然后自己一路折腾,最后折腾出来一个 Asp.net+WebSocket+Emgucv实时人脸识别的东西,网上也有不少相关资料,有用winform的也 ...

  3. 01-Unity深入浅出(一)

    一. 温故而知新 在开始学习Unity框架之前,有必要温习一下 [依赖倒置原则]和[手写IOC], 因为我们框架代码的构建都是基于[依赖倒置原则]的,而Unity框架的核心思想就是IOC和DI,所以有 ...

  4. Django眼中的MVC

    (转载)http://www.cnblogs.com/michaely/p/3340087.html MVC是众所周知的模式,即:将应用程序分解成三个组成部分:model(模型),view(视图),和 ...

  5. Python 连接MongoDB并比较两个字符串相似度的简单示例

    本文介绍一个示例:使用 pymongo 连接 MongoDB,查询MongoDB中的 字符串 记录,并比较字符串之间的相似度. 一,Python连接MongoDB 大致步骤:创建MongoClient ...

  6. 三、文件IO——系统调用(续)

    3.2.4 read 函数--- 读文件 read(由已打开的文件读取数据) #include<unistd.h> ssize_t read(int fd, void * buf, siz ...

  7. luogu 4377 Talent show 01分数规划+背包dp

    01分数规划+背包dp 将分式下面的部分向右边挪过去,通过二分答案验证, 注意二分答案中如果验证的mid是int那么l=mid+1,r=mid-1,double类型中r=mid,l=mid; 背包dp ...

  8. [C++]四分树(Quadtrees)

    [本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] 四分树Quadtrees 一幅图有1024个点, 可以对图平均分成4块, 并且子图也可以再往下分, 直到一个 ...

  9. .Net core 使用特性Attribute验证Session登陆状态

    1.新建一个.net core mvc项目 2.在Models文件夹下面添加一个类MyAttribute,专门用来保存我们定义的特性 在这里我只写了CheckLoginAttribute用来验证登陆情 ...

  10. java json 转换

    1.直接输出: 2.字符串 通过eval转换输出,里面涉及到一个转义问题,还要注意eval的用法里面需要加"("+ + ")" 3.