linux httpd 缓存清理,利用varnish构建httpd缓存服务器

varnish如何存储缓存对象:

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

malloc: 缓存在内存中;

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

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

一、在vs2和vs3上安装http

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

[root@vs2 ~]# yum install http

[root@vs2 ~]# for i in {1..10}; do echo "web$i on vs2" > /var/www/html/test$i.html; done

[root@vs2 ~]# ls /var/www/html/

test10.html  test2.html  test4.html  test6.html  test8.html

test1.html   test3.html  test5.html  test7.html  test9.html

[root@vs2 ~]# systemctl start httpd.service

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

[root@vs1 ~]# yum install varnish

三、varnish主程序的配置文件

[root@vs1 ~]# 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的命令行管理工具

[root@vs1 ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

help

help []    #获取帮助信息

ping []    #测试服务器是否正常

auth     #

quit                #退出

banner

status            #显示服务器状态信息

start            #启动子进程

stop            #停止子进程

vcl.load      #载入哪个文件为配置文件

vcl.inline  

vcl.use                 #使用哪个vcl文件

vcl.discard             #删除哪个vcl文件

vcl.list                     #列出所有可用的vcl文件

param.show [-l] []            #显示运行时参数

param.set  

panic.show                     #显示恐慌信息,显示进程或子进程上次挂掉的原因

panic.clear                                        #清除恐慌信息

storage.list                                        #显示缓存信息

vcl.show [-v]                         #显示vcl文件的详细信息,vcl编译前的样子

backend.list []                #显示后端服务器列表

backend.set_health      #手动上线下线后端服务器

ban    [&&   ]...    #清理缓存中的缓存对象

ban.list                                             #显示定义的清理缓存规则

varnish的访问日志

[root@vs1 ~]# varnishlog

[root@vs1 ~]# varnishtop

varnish的统计信息

[root@vs1 ~]# varnishstat

五、vcl配置文件的说明

3c8ce6380daa33c267ccb0e2e66a02de.png

vcl_recv    接收请求

cacheable    判断是否为可缓存对象

incache        判断hash后的结果是否存在

vcl_hash    可缓存对象hash计算

vcl_hit    缓存中命中

vcl_miss    缓存中未命中

vcl_fetch    获取后端内容

vcl_deliver    构建缓存发送

vcl_pipe        客户端请求的方法不是常见方法时,直接交给后端服务器处理

vcl_pass        不检查缓存直接从后端服务器取

vcl_error    varnish直接返回错误响应

六、vcl配置文件

[root@vs1 ~]# cp /etc/varnish/default.vcl /etc/varnish/test.vcl

[root@vs1 ~]# 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";

}

}

[root@vs1 ~]# 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上不上传任何图片

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

原创文章,作者:N17_信风,如若转载,请注明出处:http://www.178linux.com/18401

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值