varnish 缓存服务器
局部性:
空间局部
时间局部
http1.1时代
过期时间+条件式
条件式请求:客户端发请求时给缓存服务器,先查本地缓存是否命中,命中以后后端服务器可能发生变化,所以每次缓存服务器拿到客户端的请求时先去后端服务器去询问一遍,请问我现在缓存有你先前提供的内容,它发生改变了吗,
如果发生改变,就用200响应,告诉缓存服务器数据发生改变,并把新内容发给缓存服务器,缓存服务器再缓存下来新的内容。
如果没有发生改变,会回应304,未修改,于是缓存服务器就可以回应客户端了
缓存服务器发起条件式验证,如果数据没有发生改变服务器就用304回应,如果数据发生改变就用200回应,并更新新的数据到缓存服务器
if-modified-since 根据时间判定,
过期时间:客户端发了GAT或HAT请求,如果是查缓存,如果没命中,到原始服务器查数据,然后原始服务器告诉请求者,这个数据可缓存多久,几乎每一个后端服务器在响应时都会加上一个expires过期时间,告诉请求者这个数据可以缓存多久。客户端访问缓存服务器,只要数据没有过期。就可以从缓存服务器直接响应客户端
过期时间+条件式:客户端请求缓存系统,缓存系统先找原始服务器,假如这个数据可缓存,缓存服务器先把数据缓存下来,而响应时它明确告诉缓存服务器,这个数据有有效期,所以开始倒计时,当客户端访问同一内容时只要还是有效期内就从缓存服务器直接响应。
当数据的有效期过期以后,缓存服务器也不会抛弃数据,而是会条件式访问原始服务器,数据有没有改变,如果没有改变,那更新缓存服务器数据的有效期。如果改变了数据,缓存服务器更新数据
私有缓存:只要明确说明不能缓存的都能缓存
公共缓存:只有明能确缓存的才能缓存,要明确定义不能缓存客户的私有数据
http协议1.1引用的首部Cache-control ,用来控制缓存系统如何缓存数据的,告诉缓存系统那些能缓存那些不能缓存,或者客户端请求的时候,告诉缓存系统那些缓存能响应我,那些缓存不能响应我
请求报文:请求报文发出Cache-control ,告诉 缓存服务器,你缓存中有这个缓存,你也不能 响应我必须搞原始服务器去
响应报文:响应报文发出Cache-control ,告诉 缓存服务器,这个内容能不能缓存,以及能缓存多长时间,存下来以后该如何响应客户端
缓存系统中常用的首部,如何控制HTTP缓存
响应报文用于通知缓存服务器如何存储上级服务器响应的内容:
public: 能被公共缓存的就能被私有缓存,所有的缓存系统都可以被缓存
private: 仅能被私有缓存所缓存
no-cache: 告诉缓存服务器能缓存,但是不能直接直接响应客户端,下次响应客户端之前先要条件式验证,必须要重新验证
no-store: 不能缓存
no-transform:不能转换格式,客户端请求时,服务器端响应的是一个可缓存对象,但是很多服务器都配置了缓存内容是可压缩类型,它会压缩响应,客户端明明请求的是一个明文的文本编码数据,而服务器响应的是gzip压缩的结果,缓存服务器不能缓存,因为客户端请求的是明文的,而服务器响应的压缩的
mist-revalidate:必须重新验证,缓存服务器能缓存下来,客户端每次访问都要重新验证
max-age:所有缓存系统最大缓存时长
expires:绝对时间,这个缓存只能缓存到哪一年,那一月,那一天,几点几分几秒,
但是可能时区不同
cache-control:用相对时间缓存,意思是你能缓存多少秒 ,不在受时区的影响
s-maxage:公共缓存最大缓存时长
请求报文用于通知缓存服务如何使用缓存响应请求:
no-cache:不能用缓存服务器中的缓存响应我,要先验证
no-store:不能用缓存服务器中的缓存响应我,必须到原始服务器去获取内容
CDN:内容分发系统
varnish 缓存服务器:页面缓存,而且是代理式缓存,所以它首先是代理服务器,varnish面向前端也就是客户端提供服务。
我们构建自己的站点结构,有网关也就是接入层反代至varnish,同时varnish在反代,静态或动态的服务器上
yum install varnish -y
varnishadm 命令行工具
注意:不到万不得已不要重启varnish,只要重启varnish缓存项都会失效,所有缓存项都是临时的,固定的在生产环境中不支持
varnish 监听两个套接字也就是端口
面向客户端的是:6081
面向管理的接口是:6082
配置文件
vim /etc/varnish/varnish.params
启动服务
systemctl start varnish
varnish的简单配置
192.168.63.136 缓存服务器地址
192.168.63.135 HTTP服务器地址
192.168.63.137 客户端
vim /etc/varnish/default.vcl
backend default {
.host = "192.168.63.135"; #被代理的服务器地址
.port = "80"; #被代理的服务器地址端口
}
生效default.vcl
varnish_reload_vcl
在192.168.63.135后端服务器安装httpd服务器
浏览器测试
http://192.168.63.136:6081/
这样在有限的时间都是由缓存服务器提供服务
在客户端进行长时间测试
while true; do curl http://192.168.63.136:6081; sleep 2;done
在后端服务器查看日志,发现只有少量访问日志,其他的访问都别缓存服务器所代理
tail /var/log/httpd/access_log
定义vcl
ACL的语法格式
1.vcl files start with vcl 4.0;定义vcl的版本
2. //和# 都是单行注释
/* foo */ 多行注释
3.要用sub关键字自定义tines子历程
4.不支持循环,受限于引擎的内建变量
5.结束一个语句
6.Domain-specific:每个引擎要单独配置
vcl就是有限状态机叫FSM
有限状态机
1.请求和请求主机是无状态的无关联的
2.每一个请求处理时,都要和其他状态隔离
3.就算你有状态,这个状态是内部的状态机,但是彼此间有隔离
4.return 决定下一跳是哪里
引擎:当客户端发起请求,代理服务器拦截下来用引擎去分析能不能识别,识别以后能不能使用缓存,如果不能通过一个接口发送给后端服务器,后端服务器在发送个缓存服务器上的一个引擎,再由引擎响应客户端
子历程 vcl_recv:就是用在引擎上的特定代码段,而每一个子历程都要用sub定义
vcl的状态引擎
varnish刚启动时有一个叫vcl_init只执行一次
每一个用户请求都可以被vcl_recv所接收到,接收到以后判断vcl是否能出来
既不是GET也不是HEAD转到下一跳vcl_pass
如果能识别转到下一跳vcl_hash
如果无法识别转到下一跳vcl_pipe管道,做四层代理
vcl_hash
如果命中转到vcl_hit
如果没有命中vcl_miss
其他处理直接送到vcl_pass 不检查缓存
vcl_backend_fetch 面向后端
vcl_backend_response 正常响应
vcl_backend_error 通过 error自身合成一些错误响应报文
vcl_synth 合成一个响应报文,可能是错误报文,也可能是用户自定义按照某种格式定义的报文
vcl_purge 用来自行管理缓存,所谓的缓存管理是,清理缓存时可能用到
vcl_deliver 投递,意思就是给客户端发送响应报文
进入管理接口,交互式模式
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
-S 指明双方预共享的加密文件
-T 指明连接的服务器地址和端口
help 显示内建的命令
status 当前服务的状态
vcl.load
vcl.use 手动切换并调用
vcl.discard 删除
vcl.list 列出
vcl.show 查看当前的vcl或者指定的vcl配置文件
varnish> vcl.list
200
available 0 boot #启动时加载的版本
active 3 reload_2018-07-15T15:32:29 #一个是varnish_reload_vcl生效命令生成的
vcl.show reload_2018-07-15T15:32:29 vcl.show 加reload的文件就能看配置
加-v 显示默认vcl规则
vcl.show -v reload_2018-07-15T15:32:29
vcl的编程语言
格式
if (条件表达式可以用 && 与 ||) {
代码分枝
}
Client Side:面向客户端
vcl_recv, vcl_pass, vcl_hit, vcl_miss, vcl_pipe, vcl_purge, vcl_synth, vcl_deliver
Backend Side:面向后端
vcl_backend_fetch, vcl_backend_response, vcl_backend_error
两个特殊的引擎:
vcl_init:在处理任何请求之前要执行的vcl代码:主要用于初始化VMODs;
vcl_fini:所有的请求都已经结束,在vcl配置被丢弃时调用;主要用于清理VMODs;
sub vcl_recv {
if (req.method == "PRI") { #如果req.method等于PRI执行 return。如果不等于PRI,则执行后续的代码
/* We do not support SPDY or HTTP/2.0 */
return (synth(405)); #如果执行return,后续的代码都不执行,
}
举例:obj.hits是内建变量,用于保存某缓存项的从缓存中命中的次数;
注:resp是响应报文,req请求报文
注: resp.http.X-Cache 的意思的http的响应报文当中的X-Cache
注: set 设定变量
注:HIT via 经由谁命中的
注:“”引号里面的是字符串直接引用
注:+ 字符串连接
注:server.ip 请求响应的varnish的ip
如果命中了就在响应报文的头部加X-Cache,告诉是哪个varnish命中的
如果没有命中,我这次没有帮到你,抱歉
if (obj.hits>0) { #如果命中次数大于0
set resp.http.X-Cache = "HIT via" + " " + server.ip; http协议的响应报文是没有X-Cache,用set添加一个响应报文头部,其值"HIT via" +空格 varnish的ip
} else {
set resp.http.X-Cache = "MISS from " + server.ip;
}
操作符
= 代表变量赋值操作
== 代表等于
!= 代表不等于
~ 代表模式匹配,表示右侧模式,左侧是字串,左侧的字串能否被右侧的模式匹配
>
>=
<
<&#61;
逻辑操作符
&& 与
|| 或
&#xff01; 非
编辑配置文件&#xff0c;
vim /etc/varnish/default.vcl
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
手动加载&#xff0c;vcl编译好以后编辑一个名字&#xff0c;好方便调用
vcl.load conf1 default.vcl
查看
vcl.list
available 0 boot
active 0 reload_2018-07-15T15:32:29 #active代表正在使用
available 0 conf1 #available代表可用
调用conf1
vcl.use conf1
200
VCL &#39;conf1&#39; now active
丢弃
vcl.discard reload_2018-07-15T15:32:29
200
varnish 的常用变量
varnishyes代理服务器
req.* 由客户端发起的请求报文
req.request 表示请求报文的请求方法
resp.* 响应报文
bereq .*代表varnish向后端服务器发起的请求报文
bereq.request 表示请求报文的请求方法
bereq.http.HEADERS
bereq.url, req.url&#xff1a;请求的url&#xff1b;
bereq.proto&#xff1a;请求的协议版本&#xff1b;
bereq.backend&#xff1a;指明要调用的后端主机&#xff1b;
beresp.* 代表varnish接收后端服务器的响应报文
面向客户端的一侧
客户端向varnish服务器发起req.http.HEADER_NAME http的引用请求报文的首部
varnish回应客户端 resp.http.HEADER_NAME http的响应报文的首部
面向服务器端的一侧
varnish向后端的服务器发起bereq.http. 请求报文
varnish也可以接收后端服务器的beresp.http.响应报文
obj.* 开头的变量&#xff0c;就是缓存服务器自己本地缓存的缓存对象的属性
拒绝客户端的curl访问
vim /etc/varnish/default.vcl
sub vcl_recv {
if (req.http.User-Agent ~ "curl") {
return(synth(403));
}
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing COOKIEs you don&#39;t need,
# rewriting the request, etc.
}
在varnishadm工具中加载vcl文件
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
加载vcl 配置文件default.vcl&#xff0c;并起一个名字conf2
vcl.load conf2 default.vcl
调用conf2
vcl.use conf2
在客户端测试
curl http://192.168.63.136:6081
拒绝所有人访问admin开头的url
vim /etc/varnish/default.vcl
sub vcl_recv {
if (req.http.User-Agent ~ "curl") {
return(synth(403));
}
if (req.url ~ "^/admin") { #如果客户端访问admin开头的url
return(synth(403)); #就拒绝访问&#xff0c;并返回403
}
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing COOKIEs you don&#39;t need,
# rewriting the request, etc.
}
在varnishadm工具中加载vcl文件
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
加载vcl 配置文件default.vcl&#xff0c;并起一个名字conf4
vcl.load conf4 default.vcl
200
VCL compiled.
调用conf4
vcl.use conf4
200
VCL &#39;conf4&#39; now active
在客户端测试
访问admin
wget -O - -q http://192.168.63.136:6081/admin
访问主页
wget -O - -q http://192.168.63.136:6081/
vcl常用变量
beresp.* resp.*
beresp.http.HEADERS
beresp.status, resp.status&#xff1a;响应的状态码&#xff1b;
reresp.proto, resp.proto&#xff1a;协议版本&#xff1b;
beresp.backend.name&#xff1a;BE主机的主机名&#xff1b;
beresp.ttl&#xff1a;BE主机响应的内容的余下的可缓存时长&#xff1b;
obj.*
obj.hits&#xff1a;此对象从缓存中命中的次数&#xff1b;
obj.ttl&#xff1a;对象的ttl值 #可缓存对象&#xff0c;缓存下来的有效时长是多少
实验&#xff1a;不检查缓存
sub vcl_recv {
if (req.http.User-Agent ~ "curl") { 如果客户端的请求报文头部User-Agent 包含curl
return(pass); #不检查缓存
}
if (req.url ~ "^/admin") { #如果客户端访问admin开头的url
return(pass); #就不检查缓存
}
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing COOKIEs you don&#39;t need,
# rewriting the request, etc.
}
在varnishadm工具中加载vcl文件
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
加载vcl
vcl.load conf5 default.vcl
200
VCL compiled.
调用vcl
vcl.use conf5
200
VCL &#39;conf5&#39; now active
客户端测试
curl http://192.168.63.136:6081
后端服务器
示例2&#xff1a;对于特定类型的资源&#xff0c;例如公开的图片等&#xff0c;取消其私有标识&#xff0c;并强行设定其可以由varnish缓存的时长&#xff1b; 定义在vcl_backend_response中&#xff1b;
注&#xff1a;beresp后端服务器的响应报文
注&#xff1a;cache-control值
注&#xff1a; s-maxage缓存时长
注&#xff1a;(?i) 模式内容不区分大小写
注&#xff1a;unset 删除
默认发则&#xff1a;带有COOKIE不查缓存
if (beresp.http.cache-control !~ "s-maxage") { #如果后端服务器的响应报文的值无法匹配s-maxage标志
if (bereq.url ~ "(?i)\.(jpg|jpeg|png|gif|css|js)$") { #如果请求报文的内容是静态结尾的内容
unset beresp.http.Set-COOKIE; #删除后端服务器的的响应报文的Set-COOKIE头部
set beresp.ttl &#61; 3600s; #设置后端服务器的响应报文可缓存的剩余时间为3600秒
}
}
示例3&#xff1a;定义在vcl_recv中&#xff1b;
if (req.restarts &#61;&#61; 0) { #如果客户端的请求是新的
if (req.http.X-Fowarded-For) { 如果客户端的请求报文有Fowarded-Fo有i值&#xff0c;就在值的后面加一个逗号还有客户端ip
set req.http.X-Forwarded-For &#61; req.http.X-Forwarded-For &#43; "," &#43; client.ip;
} else { #如果客户端的请求报文有Fowarded-For没有值&#xff0c;就显示客户端的ip
set req.http.X-Forwarded-For &#61; client.ip;
}
}
实验
添加向后端添加报文首部
vim /etc/varnish/default.vcl
sub vcl_recv {
if (req.restarts &#61;&#61; 0) {
if (req.restarts &#61;&#61; 0) { #如果客户端的请求是新的
if (req.http.X-Fowarded-For) { 如果客户端的请求报文有Fowarded-Fo有i值&#xff0c;就在值的后面加一个逗号还有客户端ip
set req.http.X-Forwarded-For &#61; req.http.X-Forwarded-For &#43; "," &#43; client.ip;
} else { #如果客户端的请求报文有Fowarded-For没有值&#xff0c;就显示客户端的ip
set req.http.X-Forwarded-For &#61; client.ip;
}
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing COOKIEs you don&#39;t need,
# rewriting the request, etc.
}
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
加载vcl
vcl.load conf1 default.vcl
200
VCL compiled.
调用vcl
vcl.use conf1
200
VCL &#39;conf1&#39; now active
后端服务器
vim /etc/httpd/conf/httpd.conf
ogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
启动服务
systemctl restart httpd
客户端测试
wget -O - -q http://192.168.63.136:6081/admin
在后端服务器查看日志
tail /var/log/httpd/access_log
可以看见客户端的注释ip
192.168.63.138 - - [16/Jul/2018:14:17:25 &#43;0800] "GET /admin/ HTTP/1.1" 200 11 "-" "Wget/1.14 (linux-gnu)"
#####################################################################
清理缓存的方法
purge &#xff0c;ban
sub vcl_recv {
if (req.menthod &#61;&#61; "PURGE") { #如果客户端请求报文等于PURGE
return(purge); #就调用purge
}
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing COOKIEs you don&#39;t need,
# rewriting the request, etc.
}
sub vcl_purge {
return(synth(200,"Purged.")); #如果调用purge就显示200的代码
}
在varnishadm工具加载配置
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
加载vcl
vcl.load conf3 default.vcl
200
VCL compiled.
调用vcl
vcl.use conf3
200
VCL &#39;conf3&#39; now active
在客户端清除缓存
curl -X PURGE 192.168.63.136:6081/index.html
测试
curl -I 192.168.63.136:6081/index.html
注&#xff1a;这样非常的危险&#xff0c;应用所有的客户端都能清除缓存&#xff0c;我们要指定特定的客户端或者&#xff0c;只有本机才能清除缓存
访问控制acl
vim /etc/varnish/default.vcl
acl purgers { #purges的范围是127.0.0.0 子网掩码是8
"127.0.0.0"/8;
}
sub vcl_recv {
if (req.method &#61;&#61; "PURGE") { #如果客户端的请求报文等于PURGE
if (client.ip ~ purgers) { #如果客户端的ip是purgers的范围
return(purge); #就转到purge
} else { #否则&#xff0c;报403 显示Purge not allowed for加客户端ip
return(synth(403,"Purge not allowed for " &#43; client.ip));
}
}
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing COOKIEs you don&#39;t need,
# rewriting the request, etc.
}
sub vcl_purge {
return(synth(200,"Purged."));
}
在varnishadm工具加载配置
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
加载vcl
vcl.load conf4 default.vcl
200
VCL compiled.
调用vcl
vcl.use conf4
200
VCL &#39;conf4&#39; now active
在客户端测试
curl -X PURGE 192.168.63.136:6081/index.html
显示403
在varnish本机执行清除缓存操作
curl -X PURGE 127.0.0.1:6081
HTTP/1.1 200 OK
*********************************************************************************************
Banning 禁止&#xff0c;栅栏
将特定的客户端禁止访问缓存服务器
注&#xff1a;(?i) 不区分大小写
注&#xff1a;ban.list 查看
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
设置ban 客户端请求报文url是Javascripts开头的都不访问缓存
ban req.url ~ (?i)^/Javascripts
200
后端服务器
在网站目录下创建Javascripts
mkdir /var/www/html/Javascripts
for i in {1..10}; do echo "test $i" > /var/www/html/Javascripts/test$i.txt; done
varnish缓存服务器
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
设置ban 客户端请求报文url是Javascripts开头的都不访问缓存
ban req.url ~ (?i)^/Javascripts
200
客户端测试
for i in {1..10}; do curl -I -s 192.168.63.136:6081/Javascripts/test$i.txt | grep X-Varnish ;done
###########################################################################3
设定多个后端主机
调度的3种方法
directors.robin
directors.hash
directors.random
简单的动静分离
backend default { #backend设定一个后端主机名字是default
.host &#61; "172.16.100.6";
.port &#61; "80";
}
backend appsrv { #backend设定一个后端主机名字是appsrv
.host &#61; "172.16.100.7";
.port &#61; "80";
}
sub vcl_recv {
if (req.url ~ "(?i)\.php$") { #如果是php结尾的
set req.backend_hint &#61; appsrv; #就把请求报文发送到appsrv的后端服务器
} else { #否则
set req.backend_hint &#61; default; #就把请求发送到default后端服务器
}
...
}
分组
负载均衡
vim /etc/varnish/default.vcl
import directors; 支持负载均衡
定义后端服务器
backend srv1 {
.host &#61; "192.168.63.135";
.port &#61; "80";
}
backend srv2 {
.host &#61; "192.168.63.134";
.port &#61; "80";
}
创建组&#xff0c;后端服务器加入组
sub vcl_init {
new websrvs &#61; directors.round_robin(); #定义组名websrvs
websrvs.add_backend(srv1); #将srv1后端服务器加入websrvs组
websrvs.add_backend(srv2); #将srv2后端服务器加入websrvs组
}
sub vcl_recv {
set req.backend_hint &#61; websrvs.backend(); #调用组
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing COOKIEs you don&#39;t need,
# rewriting the request, etc.
}
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
加载vcl
vcl.load conf5 default.vcl
200
VCL compiled.
调用vcl
vcl.use conf5
200
VCL &#39;conf5&#39; now active
客户端测试
for i in {1..10}; do curl 192.168.63.136:6081/Javascripts/test$i.txt ;done
***********************************************************************
注 &#xff1a;random 随机调度&#xff0c;支持权重&#xff0c;但是不精确
varnish缓存服务器
vim /etc/varnish/default.vcl
sub vcl_init {
new websrvs &#61; directors.random(); #定义组名websrvs
websrvs.add_backend(srv1,1); #将srv1后端服务器加入websrvs组&#xff0c;权重是1
websrvs.add_backend(srv2,2); #将srv2后端服务器加入websrvs组,权重是2
}
客户端测试
for i in {1..10}; do curl 192.168.63.136:6081/Javascripts/test$i.txt ;done
#################################################################
对后端服务器进行健康检测
varnish缓存服务器
vim /etc/varnish/default.vcl
probe http { #主机定义名字http
.url &#61; "/index.html"; #对谁请求
.interval &#61; 2s; #多长时间检测一次
.timeout &#61; 2s; #超时时间为2秒
.window &#61; 10; #对最近的多少次检测
.threshold &#61; 7; #期望至少多少次是成功的
}
在后端设置后端服务器的ip的地方调用http
backend srv1 {
.host &#61; "192.168.63.135";
.port &#61; "80";
.probe &#61; http;
}
backend srv2 {
.host &#61; "192.168.63.134";
.port &#61; "80";
.probe &#61; http;
}
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
加载vcl
vcl.load conf7 default.vcl
200
VCL compiled.
调用vcl
vcl.use conf7
200
VCL &#39;conf7&#39; now active
客户端测试
for i in {1..10}; do curl 192.168.63.136:6081/Javascripts/test$i.txt ;done
如果有一天后端服务器down机&#xff0c;那么其他就会将客户端的请求报文发往没有down机的主机
注&#xff1a;在后端服务器的varnishadm查看所有的后端主机
backend.list
#####################################################################
手动设定BE主机的状态
管理设置
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
backend.list 查看后端服务器
sick 设定为 down
backend.set_health srv1 sick #人为的设置srv1为不可用
healthy&#xff1a;管理up
backend.set_health srv1 healthy
auto 根据porbe自动设置是丿还是down
backend.set_health srv1 auto
########################################################################
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
支持运行时修改的参数
param.show -l
每个线程池&#xff0c;最大的线程数
thread_pool_max
Value is: 5000 [threads] (default)
Default is: 5000
Minimum is: 100
最大线程空闲数
thread_pool_min
Value is: 100 [threads] (default)
Default is: 100
Maximum is: 5000
varnish一个进程可以多个请求
varnish的进程数一个是你CPU的个数&#xff0c;或者低于CPU的个数
vim /etc/varnish/varnish.params
DAEMON_OPTS&#61;"-p thread_pools&#61;2 -p thread_pool_min&#61;2 -p thread_pool_max&#61;500 -p thread_pool_timeout&#61;300"
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
设置为2个进程
param.set thread_pools 2
200
查看
param.show thread_pools
200
##################################################################333333
varnish日志区域
varnish的日志统计数据
varnishstat
查看所有指标
varnishstat -1
动态查看指标 例如MAIN
varnishstat -f MAIN
查看静态
varnishstat -f MAIN -1
查看MAIN和VBE
varnishstat -f MAIN -f VBE
实时显示内存中所有数据的访问
varnishtop
只显示某一特定 例如&#xff1a;ReqHeader
varnishtop -i ReqHeader
查看日志信息
varnishlog
详细日志信息
varnishncsa
实时的读取日志保存到特定的文件
systemctl start varnishncsa