Varnish 缓存

简介:

Centos 6.5  varnish


源码编译需要安装以下的依赖:

1
2
3
4
5
报错:
. /autogen .sh
. /autogen .sh: line 47: libtoolize:  command  not found
安装依赖:
  yum  install  libtool*
1
2
3
4
报错:
  configure: error: requires an X /Open-compatible  Curses library
安装依赖:
  yum  install  ncurses-devel -y
1
2
3
4
报错:
  configure: error: neither libedit nor another readline compatible library found
安装依赖:
  yum  install  libedit-devel -y


rpm包安装所需的依赖:


1、安装varnish所需lib,

1
  rpm --nosignature -i http: //repo .varnish-cache.org /redhat/varnish-4 .0 /el6/x86_64/varnish/varnish-libs-4 .0.0-1.el6.x86_64.rpm


2、安装jemalloc,库文件可到此链接处下载:ftp-hk.tmapy.cz/fedora/epel/6/x86_64/jemalloc-3.6.0-1.el6.i686.rpm


1
rpm --nosignature -i http: //ftp-hk .tmapy.cz /fedora/epel/6/x86_64/jemalloc-3 .6.0-1.el6.x86_64.rpm


#可以去下载合适自己的varnish版本软件包

1
http: //repo .varnish-cache.org /redhat/varnish-4 .0 /el6/x86_64/varnish/


3、开始安装,

1
rpm --nosignature -i http: //repo .varnish-cache.org /redhat/varnish-4 .0 /el6/x86_64/varnish/varnish-4 .0.0-1.el6.x86_64.rpm


安装完成后,启动varnish:

1
service varnish start


HTTP 请求的类型有几种,下面是主要的几种: 

GET : 请求指定的页面信息,并返回实体主体。 

HEAD: 只请求页面的首部。 

POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。 



pass和pipe都从后端服务器取数据,它们之间有什么不同呢?  

答:当vcl_recv调用 pass 函数时,pass将当前请求直接转发到后端服务器。而后续的请求仍然

通过varnish处理。 

例如,建立了HTTP连接之后,客户端顺序请求 a.css 、a.png两个文件,“当前请求”指的是第一个

请求,即a.css,a.css被直接转发到后端服务器,不被缓存。而后续的a.png则再由varnish来做

处理,varnish会判断a.png 如何处理。 

总结:一个连接中除了当前请求,其它请求仍然按照正常情况由varnish处理。 

 

而pipe模式则不一样,当vcl_recv判断 需要调用 pipe 函数时,varnish会在客户端和服务器之

间建立一条直接的连接 ,之后客户端的所有请求都直接发送给服务器,绕过varnish,不再由varnish

检查请求,直到连接断开。 


Request 

1、调用 pass 函数,从后端服务器调用数据。 

 

2、调用 pipe 函数,建立客户端和后端服务器之间的直接连接,从后端服务器调用数据。 

 

3、调用lookup函数,从缓存中查找应答数据并返回,如果查找不到,则调用pass函数从后端服务器

调用数据 。 



varnish vcl配置文件:


vcl_recv 接受请求

vcl_hash 缓存策略

vcl_fetch 不缓存

vcl_hit 命中

vcl_miss 未命中


1
2
3
if  (req.request != "GET"  && req.request !=  "HEAD"  && req.request !=  "PUT"  && req.request !=  "POST"  && req.request != "TRACE"  && req.request !=  "OPTIONS"  && req.request !=  "DELETE" ) {
return  (pipe);
}



#如果不是get和head,那就是post。post属于发送数据给服务器,需要服务器接受数据并处理,属于动态。

1
2
3
if  (req.request !=  "GET"  && req.request !=  "HEAD" ) {
return  (pass);
}

#认证信息

1
2
3
4
if  (req.http.Authorization || req.http.Cookie) {
return  (pass);
}
return  (lookup);


1
2
3
4
5
6
7
hash_data(req.url);
if  (req.http.host) {
hash_data(req.http.host);
else  {
hash_data(server.ip);
}
return  ( hash );


#sub vcl_deliver 返回引擎,客户端提示是否命中

1
2
3
4
5
6
7
sub vcl_deliver {
     if  (obj.hits > 0) {
        set  resp.http.X-Cache =  "Hit"
     else  {
        set  resp.http.X-Cache =  "Miss" ;
     }
}



缓存时间的计算方法


缺省的缓存时间计算方法如下:


. 先根椐max-age确定缓存时间


看返回头中的Cache-Control头中,有没有指定s-maxage或max-age信息,另外,如果后端是一个缓存服务器,它还会指定一个age头,表明已经缓存过的时间,这样需要减去age头指定的时间,计算出对应的缓存时间。


例1 只有max-age,没有age


CacheControl: max-age=86400


缓存时间:86400秒,即一天


例2 同时有max-age和age信息


CacheControl: max-age=86400

Age: 6400


缓存时间:86400 - 6400 = 80000秒




本文转自青衫解衣 51CTO博客,原文链接:http://blog.51cto.com/215687833/1913365
相关文章
|
25天前
|
缓存 运维 编译器
LAMP+Varnish缓存详解(二)——单网站缓存
LAMP+Varnish缓存详解(二)——单网站缓存
9 0
|
25天前
|
存储 缓存 运维
LAMP+Varnish缓存详解(一)——Varnish简介
LAMP+Varnish缓存详解(一)——Varnish简介
18 0
|
5月前
|
缓存 Ubuntu Linux
百度搜索:蓝易云【Varnish开源HTTP反向代理缓存服务器、部署安装、测试】
通过按照上述步骤部署和配置Varnish,您可以将其作为反向代理缓存服务器来提高Web应用程序的性能和响应速度。记住,在实际部署中,您可能需要进一步调整Varnish的配置以满足您的具体需求。
45 2
|
5月前
|
缓存 Linux 开发者
百度搜索:蓝易云【Varnish开源HTTP反向代理缓存服务器、部署安装、测试。】
通过以上步骤,你可以成功部署和安装Varnish,并对Web应用程序进行测试。请根据具体需求进行适当的配置和调整,以确保Varnish能够按预期工作并提升Web应用程序的性能。
33 0
|
存储 缓存 监控
RH358优化Web服务器流量--使用Varnish缓存静态网页
RH358优化Web服务器流量--使用Varnish缓存静态网页
291 0
RH358优化Web服务器流量--使用Varnish缓存静态网页
|
缓存 存储
web缓存与varnish
web缓存与varnish
1151 0