1VARNISH-CLI(7)                                                  VARNISH-CLI(7)
2
3
4

NAME

6       varnish-cli - Varnish Command Line Interface
7

DESCRIPTION

9       Varnish has a command line interface (CLI) which can control and change
10       most of the operational parameters and the  configuration  of  Varnish,
11       without interrupting the running service.
12
13       The CLI can be used for the following tasks:
14
15       configuration
16              You can upload, change and delete VCL files from the CLI.
17
18       parameters
19              You  can  inspect  and change the various parameters Varnish has
20              available through the CLI. The individual parameters  are  docu‐
21              mented in the varnishd(1) man page.
22
23       bans   Bans  are  filters that are applied to keep Varnish from serving
24              stale content. When you issue a ban Varnish will not  serve  any
25              banned  object from cache, but rather re-fetch it from its back‐
26              end servers.
27
28       process management
29              You can stop and start the cache (child) process though the CLI.
30              You  can  also  retrieve  the  latest  stack  trace if the child
31              process has crashed.
32
33       If you invoke varnishd(1) with -T, -M or -d the CLI will be  available.
34       In  debug  mode (-d) the CLI will be in the foreground, with -T you can
35       connect to it with varnishadm or telnet and with -M varnishd will  con‐
36       nect  back  to  a  listening  service  pushing the CLI to that service.
37       Please see varnishd(1) for details.
38
39   Syntax
40       The Varnish CLI is similar  to  another  command  line  interface,  the
41       Bourne  Shell. Commands are usually terminated with a newline, and they
42       may take arguments. The command and its arguments are tokenized  before
43       parsing,  and  as  such arguments containing spaces must be enclosed in
44       double quotes.
45
46       It means that command parsing of
47
48          help banner
49
50       is equivalent to
51
52          "help" banner
53
54       because the double quotes only indicate  the  boundaries  of  the  help
55       token.
56
57       Within  double quotes you can escape characters with \ (backslash). The
58       \n, \r, and \t get translated to newlines, carriage returns,  an  tabs.
59       Double  quotes and backslashes themselves can be escaped with \" and \\
60       respectively.
61
62       To enter characters in octals use the \nnn syntax. Hexadecimals can  be
63       entered with the \xnn syntax.
64
65       Commands  may  not  end with a newline when a shell-style here document
66       (here-document or heredoc) is used. The format of a here document is:
67
68          << word
69               here document
70          word
71
72       word can be any continuous string chosen to make sure it doesn't appear
73       naturally  in  the following here document. Traditionally EOF or END is
74       used.
75
76   Quoting pitfalls
77       Integrating with the Varnish CLI can be sometimes surprising when quot‐
78       ing  is  involved. For instance in Bourne Shell the delimiter used with
79       here documents may or may not be separated by spaces from the << token:
80
81          cat <<EOF
82          hello
83          world
84          EOF
85          hello
86          world
87
88       With the Varnish CLI, the << and EOF tokens must  be  separated  by  at
89       least one blank:
90
91          vcl.inline boot <<EOF
92          106 258
93          Message from VCC-compiler:
94          VCL version declaration missing
95          Update your VCL to Version 4 syntax, and add
96                  vcl 4.0;
97          on the first line of the VCL files.
98          ('<vcl.inline>' Line 1 Pos 1)
99          <<EOF
100          ##---
101
102          Running VCC-compiler failed, exited with 2
103          VCL compilation failed
104
105       With  the  missing space, the here document can be added and the actual
106       VCL can be loaded:
107
108          vcl.inline test << EOF
109          vcl 4.0;
110
111          backend be {
112                  .host = "localhost";
113          }
114          EOF
115          200 14
116          VCL compiled.
117
118       When using a front-end to the Varnish-CLI  like  varnishadm,  one  must
119       take  into  account the double expansion happening.  First in the shell
120       launching the varnishadm command and then in the  Varnish  CLI  itself.
121       When  a command's parameter require spaces, you need to ensure that the
122       Varnish CLI will see the double quotes:
123
124          varnishadm param.set cc_command '"my alternate cc command"'
125
126          Change will take effect when VCL script is reloaded
127
128       Otherwise if you don't quote the quotes, you may get a seemingly  unre‐
129       lated error message:
130
131          varnishadm param.set cc_command "my alternate cc command"
132          Unknown request.
133          Type 'help' for more info.
134          Too many parameters
135
136          Command failed with error code 105
137
138       If  you  are  quoting  with  a here document, you must wrap it inside a
139       shell multi-line argument:
140
141          varnishadm vcl.inline test '<< EOF
142          vcl 4.0;
143
144          backend be {
145                  .host = "localhost";
146          }
147          EOF'
148          VCL compiled.
149
150       Other pitfalls include variable expansion of the  shell  invoking  var‐
151       nishadm but this is not directly related to the Varnish CLI. If you get
152       the quoting right you should be fine even with complex commands.
153
154   Commands
155   auth <response>
156          Authenticate.
157
158   backend.list [-p] [<backend_pattern>]
159          List backends.  -p also shows probe status.
160
161   backend.set_health <backend_pattern> [auto|healthy|sick]
162          Set health status on the backends.
163
164   ban <field> <operator> <arg> [&& <field> <oper> <arg> ...]
165          Mark obsolete all objects where all the conditions match.
166
167       See vcl(7)_ban for details
168
169   ban.list
170          List the active bans.
171
172          The output format is:
173
174          · Time the ban was issued.
175
176          · Objects referencing this ban.
177
178          · C if ban is completed = no further testing against it.
179
180          · if lurker debugging is enabled:
181
182            · R for req.* tests
183
184            · O for obj.* tests
185
186            · Pointer to ban object
187
188          · Ban specification
189
190   banner
191          Print welcome banner.
192
193   help [<command>]
194          Show command/protocol help.
195
196   panic.clear [-z]
197          Clear the last panic, if any,  -z  will  clear  related  varnishstat
198          counter(s)
199
200   panic.show
201          Return the last panic, if any.
202
203   param.set <param> <value>
204          Set parameter value.
205
206   param.show [-l] [<param>|changed]
207          Show parameters and their values.
208
209       The  long form with -l shows additional information, including documen‐
210       tation and minimum, maximum and default  values,  if  defined  for  the
211       parameter.  If  a  parameter  is specified with <param>, show only that
212       parameter. If changed is specified, show only  those  parameters  whose
213       values differ from their defaults.
214
215   ping [<timestamp>]
216          Keep connection alive.
217
218   quit
219          Close connection.
220
221   start
222          Start the Varnish cache process.
223
224   status
225          Check status of Varnish cache process.
226
227   stop
228          Stop the Varnish cache process.
229
230   storage.list
231          List storage devices.
232
233   vcl.discard <configname|label>
234          Unload the named configuration (when possible).
235
236   vcl.inline <configname> <quoted_VCLstring> [auto|cold|warm]
237          Compile and load the VCL data under the name provided.
238
239          Multi-line VCL can be input using the here document ref_syntax.
240
241   vcl.label <label> <configname>
242          Apply label to configuration.
243
244   vcl.list
245          List all loaded configuration.
246
247   vcl.load <configname> <filename> [auto|cold|warm]
248          Compile and load the VCL file under the name provided.
249
250   vcl.show [-v] <configname>
251          Display the source code for the specified configuration.
252
253   vcl.state <configname> [auto|cold|warm]
254          Force the state of the named configuration.
255
256   vcl.use <configname|label>
257          Switch to the named configuration immediately.
258
259   Backend Pattern
260       A  backend pattern can be a backend name or a combination of a VCL name
261       and backend name in "VCL.backend" format.  If the VCL name is  omitted,
262       the  active  VCL  is  assumed.  Partial matching on the backend and VCL
263       names is supported using shell-style wilcards, e.g. asterisk (*).
264
265       Examples:
266
267          backend.list def*
268          backend.list b*.def*
269          backend.set_health default sick
270          backend.set_health def* healthy
271          backend.set_health * auto
272
273   Ban Expressions
274       A ban expression consists of one or more conditions.  A condition  con‐
275       sists  of  a  field,  an  operator, and an argument.  Conditions can be
276       ANDed together with "&&".
277
278       A field can be any of the variables from  VCL,  for  instance  req.url,
279       req.http.host or obj.http.set-cookie.
280
281       Operators  are "==" for direct comparison, "~" for a regular expression
282       match, and ">" or "<" for size  comparisons.   Prepending  an  operator
283       with "!" negates the expression.
284
285       The  argument could be a quoted string, a regexp, or an integer.  Inte‐
286       gers can have "KB", "MB",  "GB"  or  "TB"  appended  for  size  related
287       fields.
288
289   VCL Temperature
290       A VCL program goes through several states related to the different com‐
291       mands: it can be loaded, used, and later discarded. You can  load  sev‐
292       eral  VCL programs and switch at any time from one to another. There is
293       only one active VCL, but the previous active  VCL  will  be  maintained
294       active until all its transactions are over.
295
296       Over time, if you often refresh your VCL and keep the previous versions
297       around, resource consumption will increase, you can't escape that. How‐
298       ever,  most of the time you want only one to pay the price only for the
299       active VCL and keep older VCLs in case you'd need to rollback to a pre‐
300       vious version.
301
302       The  VCL  temperature  allows you to minimize the footprint of inactive
303       VCLs. Once a VCL becomes cold, Varnish will release all  the  resources
304       that  can  be be later reacquired. You can manually set the temperature
305       of a VCL or let varnish automatically handle it.
306
307   Scripting
308       If you are going to write a script that  talks  CLI  to  varnishd,  the
309       include/cli.h contains the relevant magic numbers.
310
311       One  particular  magic number to know, is that the line with the status
312       code and length field always is exactly 13 characters  long,  including
313       the NL character.
314
315       The  varnishapi  library  contains functions to implement the basics of
316       the CLI protocol, see the vcli.h include file.
317
318   Authentication with -S
319       If the -S secret-file is given as argument to varnishd, all network CLI
320       connections  must  authenticate,  by  proving they know the contents of
321       that file.
322
323       The file is read at the time the auth command is issued  and  the  con‐
324       tents  is  not cached in varnishd, so it is possible to update the file
325       on the fly.
326
327       Use the unix file permissions to control access to the file.
328
329       An authenticated session looks like this:
330
331          critter phk> telnet localhost 1234
332          Trying ::1...
333          Trying 127.0.0.1...
334          Connected to localhost.
335          Escape character is '^]'.
336          107 59
337          ixslvvxrgkjptxmcgnnsdxsvdmvfympg
338
339          Authentication required.
340
341          auth 455ce847f0073c7ab3b1465f74507b75d3dc064c1e7de3b71e00de9092fdc89a
342          200 279
343          -----------------------------
344          Varnish Cache CLI 1.0
345          -----------------------------
346          Linux,4.4.0-1-amd64,x86_64,-jnone,-smalloc,-smalloc,-hcritbit
347          varnish-trunk revision dc360a4
348
349          Type 'help' for command list.
350          Type 'quit' to close CLI session.
351          Type 'start' to launch worker process.
352
353       The CLI status of 107 indicates that authentication is  necessary.  The
354       first 32 characters of the response text is the challenge "ixsl...mpg".
355       The challenge is  randomly  generated  for  each  CLI  connection,  and
356       changes each time a 107 is emitted.
357
358       The  most  recently  emitted challenge must be used for calculating the
359       authenticator "455c...c89a".
360
361       The authenticator is calculated by applying the SHA256 function to  the
362       following byte sequence:
363
364       · Challenge string
365
366       · Newline (0x0a) character.
367
368       · Contents of the secret file
369
370       · Challenge string
371
372       · Newline (0x0a) character.
373
374       and dumping the resulting digest in lower-case hex.
375
376       In the above example, the secret file contained foon and thus:
377
378          critter phk> cat > _
379          ixslvvxrgkjptxmcgnnsdxsvdmvfympg
380          foo
381          ixslvvxrgkjptxmcgnnsdxsvdmvfympg
382          ^D
383          critter phk> hexdump -C _
384          00000000  69 78 73 6c 76 76 78 72  67 6b 6a 70 74 78 6d 63  |ixslvvxrgkjptxmc|
385          00000010  67 6e 6e 73 64 78 73 76  64 6d 76 66 79 6d 70 67  |gnnsdxsvdmvfympg|
386          00000020  0a 66 6f 6f 0a 69 78 73  6c 76 76 78 72 67 6b 6a  |.foo.ixslvvxrgkj|
387          00000030  70 74 78 6d 63 67 6e 6e  73 64 78 73 76 64 6d 76  |ptxmcgnnsdxsvdmv|
388          00000040  66 79 6d 70 67 0a                                 |fympg.|
389          00000046
390          critter phk> sha256 _
391          SHA256 (_) = 455ce847f0073c7ab3b1465f74507b75d3dc064c1e7de3b71e00de9092fdc89a
392          critter phk> openssl dgst -sha256 < _
393          455ce847f0073c7ab3b1465f74507b75d3dc064c1e7de3b71e00de9092fdc89a
394
395       The  sourcefile  lib/libvarnish/cli_auth.c  contains  a useful function
396       which calculates the response, given  an  open  filedescriptor  to  the
397       secret file, and the challenge string.
398

EXAMPLES

400       Load a multi-line VCL using shell-style here document:
401
402          vcl.inline example << EOF
403          vcl 4.0;
404
405          backend www {
406              .host = "127.0.0.1";
407              .port = "8080";
408          }
409          EOF
410
411       Ban all requests where req.url exactly matches the string /news:
412
413          ban req.url == "/news"
414
415       Ban all documents where the serving host is "example.com" or "www.exam‐
416       ple.com", and where the Set-Cookie header  received  from  the  backend
417       contains "USERID=1663":
418
419          ban req.http.host ~ "^(?i)(www\\.)?example\\.com$" && obj.http.set-cookie ~ "USERID=1663"
420

AUTHORS

422       This  manual page was originally written by Per Buer and later modified
423       by Federico  G.  Schwindt,  Dridi  Boukelmoune,  Lasse  Karstensen  and
424       Poul-Henning Kamp.
425

SEE ALSO

427       · varnishadm(1)
428
429       · varnishd(1)
430
431       · vcl(7)
432
433
434
435
436                                                                VARNISH-CLI(7)
Impressum