.. _运行命令行接口: 命令行接口(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)还是更方便一点。 如果你不带参数执行`varnishadm`,它会从`stdin`(标准输入)中读取CLI命令,如果你带了参数,它会将这些作为单一的CLI命令来执行。 在CLI中执行命令每次都会返回一个状态码,告诉我们它执行的状态: 如果返回的是‘200’,意思是执行成功了,如果返回的是其它的状态,说明是有问题了。 如果返回的状态码不是200,`varnishadm`会返回状态1并退出,同时通过标准错误输出打印出状态码。 在命令行接口(CLI)中能做什么 ---------------------------- CLI给了你对`varnishd`几乎完全的控制权,以下是你可以执行的一些重要的任务: * 加载/使用/剔除VCL程序 * 取消(删除)缓存内容 * 更改参数值 * 启动/关闭工作进程 现在我们来讨论以上的简述。 加载/使用/剔除VCL程序 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 所有的缓存策略都是通过VCL程序配置的。 你可以加载多个VCL程序,但是同一时间只能有一个是被指定为 "active"的。所有新的请求都从这里开始。 加载新的VCL程序:: varnish> vcl.load some_name some_filename 加载过程中,Varnish会从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程序就被加载了。然后你随时可以通过下面的命令把这个VCL程序指定为"active":: varnish> vcl.use some_name 如果你发现新的VCL程序有些问题,你可以再换回以前的VCL程序:: varnish> vcl.use old_name 切换过程是瞬间完成的,完成之后所有的新的请求都会使用当前的这个新的VCL程序。正在处理的请求还是会使用原来老的VCL程序。 这里有个好想法是事先设计好一个紧急的VCL程序,并且始终保持它是被加载的状态。这样在你需要的时候,你只需要通过一个命令vcl.use就可以切换到这个VCL程序来。 .. XXX:上面这段是不是应该做个更清晰明了的忠告,比如,注意:xxx? benc Ban缓存内容 ^^^^^^^^^^^^^^^^^ Varnish提供 "purges"来清除缓存内容,只要你能指定具体的对象。 但是有时候,不指定一个具体的对象列表也能清除缓存是非常有用的。 想象一下,例如,一个公司的logo变了,现在你想让Varnish停止使用缓存中旧的logo,你应该这样做:: varnish> ban req.url ~ "logo.*[.]png" 没错,这就是正则表达式。 我们把这种方式叫"banning"因为被取消的对象还存在缓存中,只是被禁止返回给客户端。 只有在HTTP请求这个对象的时候Varnish会把这个对象和正则表达式做匹配,而不是立即匹配缓存中的所有对象。 banning要比重启Varnish以去掉无用的内容要实惠的多。 .. 除了一些特殊的场合,banning有很多灵活的方式 .. 来保持缓存更新,更多的 .. 信息请参考: (TODO: xref) 更改参数值 ^^^^^^^^^^^^^^^^^ 参数可以用“-p”的选项在Varnish启动的时候进行设置,但也可以通过CLI对运行中的Varnish的参数进行设置:: 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 一般来说是不建议修改参数,除非你有一个充分的理由。比如性能优化和安全配置。 大多数参数修改后会立即生效或者因为一些持续性的操作而自然延迟, .. XXX: 因为一些持续性的操作而自然延迟,听起来有点含糊。 benc 但是有些参数修改后需要重启子进程才会生效,这些在参数的描述中,都会有说明。 启动和停止工作进程 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 一般来说,你应该保持工作进程一直是运行状态,但是如果你一定要启动或者停止它,以下非常简单明了的命令可以做到:: varnish> stop and:: varnish> start 如果你启动`varnishd`的时候加了‘-d’ (debugging)选项,你需要显式地去启动子进程。 如果子进程挂了,主进程会自动重新启动它,但你可以通过关闭“auto_restart'参数来禁用这个功能。