CLI —— 向varnish下发指令
一旦 varnishd 启动,您就可以使用命令行接口来控制它。
最简单的方法是在运行 varnishd 的机器上面运行 varnishadm :
varnishadm help
如果您想在远程系统运行 varnishadm ,那么你有两种方法:
你可以使用ssh登录到运行 varnishd 的机器,并运行 varnishadm :
ssh $http_front_end varnishadm help
您也可以配置 varnishd 来接收远程CLI连接(使用-T
和-S
参数):
varnishd -T :6082 -S /etc/varnish_secret
然后在您的远程系统中运行 varnishadm :
varnishadm -T $http_front_end -S /etc/copy_of_varnish_secret help
您可以看到,ssh连接更为方便一点。
如果您运行 vanishadm 的时候没有添加参数,那么它将会从标准输入中读取cli命令。如果您指定了参数,那么它将这些参数作为单一的CLI命令执行。
CLI总是会返回一个状态码,告诉你执行的结果,200代表成功,返回其他状态码的话说明有问题。
varnishadm 退出时的状态是1,如果不是200的话,它会在标准错误输出中显示状态码。
使用CLI您可以做什么?
CLI提供给你几乎所有对 varnishd 的控制,甚至是一些重要的操作你也可以执行:
- 加载/使用/禁用VCL程序
- 禁止缓存
- 改变参数
- 启动/停止 worker进程
接下来我们就简单讨论一下:
加载/使用/禁用VCL程序
所有缓存以及处理策略的定义都是通过VCL程序。
您可以批量载入VCL程序,但是只有一个会被指定为“active”的VCL程序,这就是所有新请求开始的地方。
加载新的VCL程序:
varnish> vcl.load some_name some_filename
加载过程将会从文件中读取VCL程序,并且编译。如果编译失败,您将会看到错误信息:
.../mask is not numeric.
('input' Line 4 Pos 17)
"192.168.2.0/24x",
----------------#################-
Running VCC-compiler failed, exit 1
VCL compilation failed
如果您编译成功,VCL程序将会被加载,并且你现在可以激活它,在任何你需要的时候:
varnish> vcl.use some_name
如果测试后有异常,您可以回滚到之前的VCL程序:
varnish> vcl.use old_name
这种转换是瞬间就完成的,新的请求都会使用你新激活的VCL程序,而现在正在处理的请求将会还使用旧的VCL。
一个很好的方法是您提前设计一个紧急使用的VCL, 同时始终加载它,那么当你需要使用它的时候那就是一个vcl.use
一个命令那么简单的事了。
禁止缓存
varnish提供了"purges"来从缓存中删除东西,只要您明确知道他们是些什么。
但是有时候无需知道是什么也可以来清除缓存,这个也是非常有用的。
想象一下,比如公司的logo更换了,那么你现在就需要让varnish停止从旧的缓存中来返回内容:
varnish> ban req.url ~ "logo.*[.]png"
就是这么简单,是的,就是正则表达式。
我们之所以称之为“禁止”是因为对象仍然在缓存中,只不过我们禁止分发了。
当请求过来的时候我们仅仅是使用正则来匹配每个对象,而不是立即检查每一个缓存了的对象。
这种实现方式比那种重启varnish的方式是要方便的多的。
修改参数
在命令行中可以使用-p
参数来设置参数,但是也可以从运行的CLI中对其进行检查和修改。
varnish> param.show prefer_ipv6
200
prefer_ipv6 off [bool]
Default is off
Prefer IPv6 address when connecting to backends
which have both IPv4 and IPv6 addresses.
varnish> param.set prefer_ipv6 true
200
一般而言,修改参数并不是一个好主意,除非您有一个好的理由,比如性能优化和安全配置等等。
大多数参数是立即生效的,或者有一些时间上的延迟。
其中有一些还需要你重启子进程才能生效,这些总是会在参数的描述中进行说明。
启动和关闭worker进程
一般来说,您应该保持worker进程是工作状态,但是如果您需要停止或者启动它,您可以这样做:
varnish> stop
和
varnish> start
如果您启动 varnishd 的时候带了-d
参数,那么您可能需要显式的去启动它。
如果子进程挂了,主进程将会自动重启,但是您也可以禁用“auto_restart”参数。