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

web缓存服务器varnish

web缓存服务器varnish-4.1.6的部署及配置详解1.安装varnish4.1.6安装依赖yuminstall-yautoconfautomakejemalloc-devellib

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.vcl
vcl
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; # 定义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 > 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分钟
}

 


推荐阅读
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • springMVC JRS303验证 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • 本文介绍如何配置SecureCRT以正确显示Linux终端的颜色,并解决中文显示问题。通过简单的步骤设置,可以显著提升使用体验。 ... [详细]
  • TortoiseSVN与VisualSVN Server的安装及基本操作指南
    本文详细介绍了如何安装VisualSVN Server以及TortoiseSVN客户端,并提供了基本的操作步骤,包括配置仓库、用户管理及权限设置等关键环节。 ... [详细]
  • CentOS 7.2 配置防火墙端口开放
    本文介绍如何在 CentOS 7.2 系统上配置防火墙以开放特定的服务端口,包括 FTP 服务的临时与永久开放方法,以及如何验证配置是否生效。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 本文探讨了在iOS平台上开发BLE(蓝牙低功耗)应用程序时遇到的挑战,特别是如何实现应用在后台模式下仍能持续扫描并连接蓝牙设备。文章提供了具体的配置方法和常见的问题解决方案。 ... [详细]
  • RedHat 系统下配置国内 YUM 源以替代官方收费源的方法
    本文详细介绍如何在 RedHat Linux 中安装并配置 YUM 包管理器,并通过使用国内镜像源来解决因未购买官方服务而导致的更新源限制问题。 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 解决vCenter vSphere HA初始化失败的问题
    本文探讨了在集群中遇到的所有vSphere HA主机状态显示‘无法正确安装或配置vSphere HA代理’错误的情况,并详细介绍了排查与解决步骤,包括检查HA初始化错误及安装HA代理的常见故障排除方法。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
author-avatar
黄乐瞳_319
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有