CLI 向Vanish下发指令
一旦vanish启动,你可以使用命令行接口来控制它。
最轻松的使用CLI的方法是在运行varnishd的机器上运行,varnishadm
varnishadm help
如果你想远程使用varnishadm,有两种方法。
你可以使用ssh登录到运行varnishd的机器上然后varnishadm
ssh $http_front_end varnishadm help
同时你也可以配置vanishd接受远程的CLI连接,(使用-T和-S参数)
varnishd -T :6082 -S /etc/varnish_secret
然后在远程主机上运行vanishadm,像这样
varnishadm -T $http_front_end -S /etc/copy_of_varnish_secret help
但是你也看到,ssh是更方便的。
如果运行vanishadm没有添加参数,它将会从标准输入读取CLI命令,如果你指定了参数,它将这些参数作为单个CLI命令来执行。
CLI总是返回一个状态码,告诉你操作的结果,'200'为成功,其他状态码就有问题了。
vanishadm退出时使用状态1,并且如果不是200的状态码,它将在标准错误输出中打印状态码。
你能用CLI做些什么呢?
CLI提供给你几乎对vanishd所有的控制,一些重要的操作你可以执行:
load/use/discard VCL programs 载入/使用/禁用VCL程序
ban (invalidate) cache content 清除缓存
change parameters 改变参数
start/stop worker process 启动和停止work进程
接下来我们先简单的讨论这些。
所有的缓存和策略定义都是通过VCL程序。
你可以载入多个VCL程序,同时它们中被指定成“active”的VCL程序,这些active的VCL程序将处理新的请求。
加载新的VCLc程序:
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
这种转换是瞬时的,所有新的请求就立即开始使用active的VCL程序。当前的请求将被使用VCL来处理。
有个好主意就是设计一个应急的VCL,同时总是加载它,那么你就可以转换它使用单个的vcl.use 命令。
禁止缓存
varnish提供"purges"来从缓存中移除某些内容,假如你明确的知道他们是些什么。
但是有时它不需要你指定明确的需要移除的内容。
想象个场景,公司的logo变了,现在需要从varnish cache中清除老的log:
varnish> ban req.url ~ "logo.*[.]png"
就应该这样做,是的,正则表达式。
我们调用"banning"因为这些对象仍然是在cache中的,但是它们在传递过程中被禁用了。
当接收到http请求,我们测试的正则表达式的每个对象,而不是立即检查每一个缓存了的对象。
Banning实现比直接重启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(debugging)参数,你将总是需要明确地启动child进程。
有可能child进程die(not work),主进程将自动重启child进程,但是你也可以禁用自动重启,使用 'auto_restart'参数