利用varnish构建httpd缓存服务器

varnish如何存储缓存对象:

file: 单个文件;不支持持久机制;

malloc: 缓存在内存中;

persistent:基于文件的持久存储;(此方式不建议使用)

vcl:配置缓存系统的缓存机制;【线程中缓存功能的工作机制】

一、在vs2和vs3上安装http

写入文件,内容一个为on vs2,另一个为on vs3

[[email protected] ~]# yum install http
[[email protected] ~]# for i in {1..10}; do echo "web$i on vs2" > /var/www/html/test$i.html; done
[[email protected] ~]# ls /var/www/html/
test10.html  test2.html  test4.html  test6.html  test8.html
test1.html   test3.html  test5.html  test7.html  test9.html
[[email protected] ~]# systemctl start httpd.service

二、安装varnish(在centos7上安装4.0.3版本)

[[email protected] ~]# yum install varnish

三、varnish主程序的配置文件

[[email protected] ~]# vim /etc/varnish/varnish.params 

# Varnish environment configuration description. This was derived from
# the old style sysconfig/defaults settings

# Set this to 1 to make systemd reload try to switch vcl without restart.
RELOAD_VCL=1

# Main configuration file. You probably want to change it.
VARNISH_VCL_CONF=/etc/varnish/default.vcl    #读取vcl配置文件的位置

# Default address and port to bind to. Blank address means all IPv4
# and IPv6 interfaces, otherwise specify a host name, an IPv4 dotted
# quad, or an IPv6 address in brackets.
# VARNISH_LISTEN_ADDRESS=192.168.1.5
VARNISH_LISTEN_PORT=6081    #监听的服务端口为6081

# Admin interface listen address and port
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1    #监听的管理地址为本机
VARNISH_ADMIN_LISTEN_PORT=6082    #监听的管理端口为6082

# Shared secret file for admin interface
VARNISH_SECRET_FILE=/etc/varnish/secret    #密钥文件位置

# Backend storage specification, see Storage Types in the varnishd(5)
# man page for details.
VARNISH_STORAGE="file,/var/lib/varnish/varnish_storage.bin,1G"    #缓存以文件的方式的存储位置和大小
#VARNISH_STORAGE="malooc,256M"    #以内存方式缓存,缓存大小为256M

# Default TTL used when the backend does not specify one
VARNISH_TTL=120    #联系后端服务器超时时长

# User and group for the varnishd worker processes
VARNISH_USER=varnish    #主进程所使用的用户
VARNISH_GROUP=varnish    #主进程所使用的组

# Other options, see the man page varnishd(1)    #进程选项,线程池的最大值最小值和超时时长
DAEMON_OPTS="-p thread_pool_min=5 -p thread_pool_max=500 -p thread_pool_timeout=300"

四、varnish的命令行管理工具

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
help      
help [<command>]    #获取帮助信息
ping [<timestamp>]    #测试服务器是否正常
auth <response>    #
quit                #退出
banner
status            #显示服务器状态信息
start            #启动子进程
stop            #停止子进程
vcl.load <configname> <filename>    #载入哪个文件为配置文件
vcl.inline <configname> <quoted_VCLstring>
vcl.use <configname>                #使用哪个vcl文件
vcl.discard <configname>            #删除哪个vcl文件
vcl.list                     #列出所有可用的vcl文件
param.show [-l] [<param>]            #显示运行时参数
param.set <param> <value>                
panic.show                     #显示恐慌信息,显示进程或子进程上次挂掉的原因
panic.clear                                        #清除恐慌信息
storage.list                                        #显示缓存信息
vcl.show [-v] <configname>                        #显示vcl文件的详细信息,vcl编译前的样子
backend.list [<backend_expression>]                #显示后端服务器列表
backend.set_health <backend_expression> <state>    #手动上线下线后端服务器
ban <field> <operator> <arg> [&& <field> <oper> <arg>]...    #清理缓存中的缓存对象
ban.list                                             #显示定义的清理缓存规则

varnish的访问日志

[[email protected] ~]# varnishlog
[[email protected] ~]# varnishtop

varnish的统计信息

[[email protected] ~]# varnishstat

五、vcl配置文件的说明

http://book.varnish-software.com/4.0/chapters/VCL_Basics.html

http://book.varnish-software.com/4.0/_images/simplified_fsm.svg

vcl_recv    接收请求
cacheable    判断是否为可缓存对象
incache        判断hash后的结果是否存在
vcl_hash    可缓存对象hash计算
vcl_hit    缓存中命中
vcl_miss    缓存中未命中
vcl_fetch    获取后端内容
vcl_deliver    构建缓存发送
vcl_pipe        客户端请求的方法不是常见方法时,直接交给后端服务器处理
vcl_pass        不检查缓存直接从后端服务器取
vcl_error    varnish直接返回错误响应

六、vcl配置文件

[[email protected] ~]# cp /etc/varnish/default.vcl /etc/varnish/test.vcl
[[email protected] ~]# vim /etc/varnish/test.vcl 
# This is an example VCL file for Varnish.
#
# It does not do anything by default, delegating control to the
# builtin VCL. The builtin VCL is called when there is no explicit
# return statement.
#
# See the VCL chapters in the Users Guide at https://www.varnish-cache.org/docs/
# and http://varnish-cache.org/trac/wiki/VCLExamples for more examples.

# Marker to tell the VCL compiler that this VCL has been adapted to the
# new 4.0 format.
vcl 4.0;

# Default backend definition. Set this to point to your content server.
backend vs2 {    #定义后端主机vs2
    .host = "172.16.24.102";
    .port = "80";
    .probe = {    #对后端主机的test1进行进行健康状态检测
        .url = "/test1.html";
        }
}
backend vs3 {
    .host = "172.16.24.104";
    .port = "80";
    .probe = {
        .url = "/test1.html";
        }
}
#import directors;    #加载directors模块,在负载均衡轮询时要用到
#sub vcl_init {        #轮询方式的负载均衡
#    new mycluster = directors.round_robin();
#    mycluster.add_backend(vs2);
#    mycluster.add_backend(vs3);
#}

sub vcl_recv {
    # Happens before we check if we have this in cache already.
    #
    # Typically you clean up the request here, removing cookies you don‘t need,
    # rewriting the request, etc.
    
    #url中开头带有login或者admin的直接从后端主机取结果不缓存
    if (req.url ~ "(?i)^/login" || req.url ~ "(?i)^/admin") {  
        return(pass);
    }

    #url以jpg,png,gif结尾的直接发给vs2,其他的都发给vs3
    if (req.url ~ "(?i)\.(jpg|png|gif)$") {
        set req.backend_hint = vs2;
    } else {
        set req.backend_hint = vs3;
    }

#    set req.backend_hint = mycluster.backend();    #负载均衡集群

#如果客户端请求为PRI返回405,如果请求的为非GET,HEAD,PUT,POST,TRACE,OPTIONS,DELETE都直接发给后端主机处理
    if (req.method == "PRI") {
        /* We do not support SPDY or HTTP/2.0 */
        return (synth(405));
    }
    if (req.method != "GET" &&
      req.method != "HEAD" &&
      req.method != "PUT" &&
      req.method != "POST" &&
      req.method != "TRACE" &&
      req.method != "OPTIONS" &&
      req.method != "DELETE") {
        /* Non-RFC2616 or CONNECT which is weird. */
        return (pipe);
    }

    if (req.method != "GET" && req.method != "HEAD") {
        /* We only deal with GET and HEAD by default */
        return (pass);
    }
    if (req.http.Authorization || req.http.Cookie) {
        /* Not cacheable by default */
        return (pass);
    }
    return (hash);
}

sub vcl_backend_response {
    # Happens after we have read the response headers from the backend.
    #
    # Here you clean the response headers, removing silly Set-Cookie headers
    # and other mistakes your backend does.
}

sub vcl_deliver {
    # Happens when we have all the pieces we need, and are about to send the
    # response to the client.
    #
    # You can do accounting or modifying the final object here.
    #如果缓存能命中就在返回值中插入HIT,未命中则插入MISS
    if (obj.hits>0) {
        set resp.http.X-Cache = "HIT";
    } else {
        set resp.http.X-Cache = "MISS";
    }
}

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
vcl.load test2 test.vcl
200        
VCL compiled.
vcl.use test2
200        
VCL ‘test2‘ now active

七、测试

在vs2上上传一张dog.jpg,在vs3上不上传任何图片

时间: 2024-10-11 19:00:35

利用varnish构建httpd缓存服务器的相关文章

varnish 优秀的缓存服务器

[去除干扰环境]关停:本机的httpd,haproxy,nginx iptables [varnish 优秀的缓存服务器] 特点 反向代理,负载均衡,健康状态检查 连接弱于nginx,nginx比varnish反向代理好 [看看] curl -I www.sohu.com Cache-Control: no-transform, max-age=120 [安装] varnish-3.0.4-1.el6.x86_64.rpm varnish-libs-3.0.4-1.el6.x86_64.rpm

利用Nginx构建负载均衡服务器

大家都知道,一个域名对应一个IP地址,而一个WebSite则对应一个IP地址上对应端口服务的应用程序(或位置).而大型网站的并发访问量非常大,这些网站是如何在一台Web服务器上实现负载均衡的呢? 相信很多人会有与我同样的疑惑,但实际上成熟的解决方案已经大规模投入使用.而常用的则是反向代理方法. 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理

Varnish反向代理缓存服务器

缓存及加速 高性能缓存服务器1.1 Varnish概述一款高性能.开源的反向代理服务器和缓存服务器(一台varnish可以抵6台Squid)Varnish使用内存做为缓存设备(纯内存缓存服务器方案),相对于Squid(采用硬盘缓存),拥有更快的缓存速度(varnish内存管理完全交给内核,但当缓存内容超过阈值时,内核会自动将一部分缓存存入swap中,让出内存) 1.Varnish进程 varnish主要运行两个进程:Management 进程和Child进程(也称为Cache进程)Managem

Varnish,Nginx搭建缓存服务器

一. varnish 1.安装pcre库,兼容正则表达式 # tar -zxvf pcre-8.10.tar.gz # cd pcre-8.10 # ./configure --prefix=/usr/local/pcre # make && make install 2.配置安装varnish # tar -zxvf varnish-3.0.2.tar.gz # cd varnish-3.0.2 # export PKG_CONFIG_PATH=/usr/local/pcre/lib/p

构建httpd网站服务器

解压缩软件包: 进源码包目录并配置定制功能: 将文件转为二进制并安装: 确认安装结果: 优化执行路径: 将apachectl脚本复制为/etc/init.d/httpd: 编辑服务脚本: 确认文件有执行权限: 添加为系统服务: 查看httpd服务的自启动状态: 配置httpd服务: 启动服务: 查看进程: 查看监听: 访问测试网页: 客户端安装测试工具: 添加DNS记录: 添加正反向解析: 重启DNS服务: Linux测试: Windows测试: 配置awstats日志分析系统: 先将下载好的服

利用OpenSSL构建私有CA

实验环境: CentOS release 6.6(Final)  两台 IP地址: 服务器端:172.16.31.3 客户端:172.16.31.2 查看系统书否已安装openSSL执行命令"rpm –qa openssl" [[email protected] ~]# rpm -qa openssl openssl-1.0.1e-30.el6.x86_64 OpenSSL本身是一种ssl的开源方式用以实现https的数据加密传输,但OpenSSL的功能绝不仅限于此,OpenSSL提供

利用varnish做Discuz论坛的缓存服务器

实验背景:公司有一台BBS服务器,用的是LNMP的架构搭建的.正好手头有一台空闲的虚拟机,于是想着给BBS前端加一台缓存服务器.于是选定了varnish,搜了很多教程,跌跌撞撞的完成了配置.这其中很多配置的作用我也不是十分了解,这里先给出大体的配置,之后有时间会研究一下其中配置的原理和具体作用. 实验系统:CentOS 6.4_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有2台主机,IP分配如拓扑 实验软件:varnish-3.0.7-1 varnish-libs-3

varnish缓存服务器构建疑问

标题索引 追朔原因 实验分解 抓包分析 追朔原因 当下是互联网时代也是CDN缓存时代,缓存可以大面积减少 实验分解 当客户端浏览器cache-control:max-age=0时,表示客户端可以从缓存服务器端获取数据,但获取时必须让缓存服务器到数据服务器端进行验证: 当客户端浏览器cache-control:max-age>0时,表示客户端可以从缓存服务器端直接获取数据.

缓存服务器-varnish

Varnish 简介 Varnish是一款高性能且开源的反向代理服务器和 HTTP 加速器(其实就是带缓存的反向代理服务),它可以把整个HTTP响应内容缓存到内存或文件中,从而提高Web服务器的响应速度.其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高.速度更快.管理更加方便等诸多优点,很多大型的网站都开始尝试使用 varnish 来替换 squid,这些都促进 varnish 迅速发展起来. Varnish内置强大的VCL(Varni