博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
web缓存服务器varnish-4.1.6的部署及配置详解
阅读量:6830 次
发布时间:2019-06-26

本文共 3849 字,大约阅读时间需要 12 分钟。

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=1    # 重新启动服务时是否重新读取VCL并重新编译VARNISH_VCL_CONF=/etc/varnish/default.vcl    # 默认读取的VCL文件VARNISH_LISTEN_PORT=80    # 设置监听的端口(默认监听6081端口)VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1    # 管理接口监听的地址VARNISH_ADMIN_LISTEN_PORT=6082    # 管理接口监听的端口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 = "80";}

 

启动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.vclvcl 4.0;                    # 指明varnish版本                        backend web01 {                    # 定义后端服务器1    .host = "192.168.3.12";    .port = "80";}backend web02 {                    # 定义后端服务器2    .host = "192.168.3.13";    .port = "80";}import directors;                # 定义directorssub 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 > 0) {                      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 = "80";    .probe = {        .url = "/";            # 指定哪个url需要varnish请求        .timeout = 2s;         # 指定超时等待时间        .interval = 5s;         # 指定检查时间间隔        .window = 5;            # 最多尝试5次        .threshold = 3;          # 至少有3次成功就宣告backend健康    }}backend web02 {    .host = "192.168.3.13";    .port = "80";    .probe = {        .url = "/";        .timeout = 2s;        .interval = 5s;        .window = 5;        .threshold = 3;    }}

 

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分钟}

 

转载于:https://www.cnblogs.com/reblue520/p/6994412.html

你可能感兴趣的文章
MySQL学习足迹记录01--SOURCE,SHOW
查看>>
tomcat安装配置
查看>>
Struts2.0+Hibernate2.5+Spring3.0搭建JavaEE项目要用的jar
查看>>
2013互联网公司,年终奖有几何?
查看>>
互联网
查看>>
MySQL load data 权限相关
查看>>
ScriptManager.RegisterStartupScript失效的解决方案
查看>>
vsftpd 添加用户
查看>>
递归方法
查看>>
Sonar+maven+jenkins集成,Java代码走查
查看>>
js中点击返回顶部
查看>>
Gtest源码剖析:1.实现一个超级简单的测试框架xtest
查看>>
第三方模块的安装
查看>>
Terracotta中锁与性能的问题
查看>>
遇到Linux系统安装时窗口过大,按钮点不到,该怎么解决
查看>>
js 判断输入是否为正整数
查看>>
「收藏」一些有趣的图
查看>>
探索虚函数(二)
查看>>
李青云老人的长寿秘诀【转】
查看>>
Springboot Thymeleaf 发邮件 将html内容展示在邮件内容中
查看>>