]> git.proxmox.com Git - ceph.git/blob - ceph/src/civetweb/docs/UserManual.md
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / civetweb / docs / UserManual.md
1
2 Overview
3 =====
4
5 Civetweb is small and easy to use web server.
6 It may be embedded into C/C++ host applications or used as a stand-alone
7 server. See `Embedding.md` for information on embedding civetweb into
8 host applications.
9
10 The stand-alone server is self-contained, and does not require any external
11 software to run. Some Windows users may need to install the
12 [Visual C++ Redistributable](http://www.microsoft.com/en-us/download/details.aspx?id=30679).
13
14 Installation
15 ----
16
17 On Windows, UNIX and Mac, the civetweb stand-alone executable may be started
18 from the command line.
19 Running `civetweb` in a terminal, optionally followed by configuration parameters
20 (`civetweb [OPTIONS]`) or a configuration file name (`civetweb [config_file_name]`),
21 starts the web server.
22
23 For UNIX and Mac, civetweb does not detach from the terminal.
24 Pressing `Ctrl-C` keys will stop the server.
25
26 On Windows, civetweb iconifies itself to the system tray icon when started.
27 Right-click on the icon pops up a menu, where it is possible to stop
28 civetweb, or configure it, or install it as Windows service.
29
30 When started without options, the server exposes the local directory at
31 [http](http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol) port 8080.
32 Thus, the easiest way to share a folder on Windows is to copy `civetweb.exe`
33 to this folder, double-click the exe, and launch a browser at
34 [http://localhost:8080](http://localhost:8080). Note that 'localhost' should
35 be changed to a machine's name if a folder is accessed from other computer.
36
37 When started, civetweb first searches for the configuration file.
38 If configuration file is specified explicitly in the command line, i.e.
39 `civetweb path_to_config_file`, then specified configuration file is used.
40 Otherwise, civetweb would search for file `civetweb.conf` in the same directory
41 the executable is located, and use it. This configuration file is optional.
42
43 The configuration file is a sequence of lines, each line containing one
44 command line argument name and the corresponding value.
45 Empty lines, and lines beginning with `#`, are ignored.
46 Here is the example of `civetweb.conf` file:
47
48 document_root c:\www
49 listening_ports 80,443s
50 ssl_certificate c:\civetweb\ssl_cert.pem
51
52 When a configuration file is used, additional command line arguments may
53 override the configuration file settings.
54 All command line arguments must start with `-`.
55
56 For example: The above `civetweb.conf` file is used, and civetweb started as
57 `civetweb -document_root D:\web`. Then the `D:\web` directory will be served
58 as document root, because command line options take priority over the
59 configuration file. The configuration options section below provides a good
60 overview of the Civetweb features.
61
62 Note that configuration options on the command line must start with `-`,
63 but their names are the same as in the config file. All option names are
64 listed in the next section. Thus, the following two setups are equivalent:
65
66 # Using command line arguments
67 $ civetweb -listening_ports 1234 -document_root /var/www
68
69 # Using config file
70 $ cat civetweb.conf
71 listening_ports 1234
72 document_root /var/www
73 $ civetweb
74
75 Civetweb can also be used to modify `.htpasswd` passwords files:
76
77 civetweb -A <htpasswd_file> <realm> <user> <passwd>
78
79 Unlike other web servers, civetweb does not require CGI scripts to be located
80 in a special directory. CGI scripts can be anywhere. CGI (and SSI) files are
81 recognized by the file name pattern. Civetweb uses shell-like glob
82 patterns. Pattern match starts at the beginning of the string, so essentially
83 patterns are prefix patterns. Syntax is as follows:
84
85 ** Matches everything
86 * Matches everything but slash character, '/'
87 ? Matches any character
88 $ Matches the end of the string
89 | Matches if pattern on the left side or the right side matches.
90
91 All other characters in the pattern match themselves. Examples:
92
93 **.cgi$ Any string that ends with .cgi
94 /foo Any string that begins with /foo
95 **a$|**b$ Any string that ends with a or b
96
97 # Configuration Options
98
99 Below is a list of configuration options understood by Civetweb.
100 Every option is followed by it's default value. If a default value is not
101 present, then the default is empty.
102
103 ### cgi\_pattern `**.cgi$|**.pl$|**.php$`
104 All files that match `cgi_pattern` are treated as CGI files. Default pattern
105 allows CGI files be anywhere. To restrict CGIs to a certain directory,
106 use `/path/to/cgi-bin/**.cgi` as pattern. Note that the full file path is
107 matched against the pattern, not the URI.
108
109 ### cgi\_environment
110 Extra environment variables to be passed to the CGI script in
111 addition to standard ones. The list must be comma-separated list
112 of name=value pairs, like this: `VARIABLE1=VALUE1,VARIABLE2=VALUE2`.
113
114 ### put\_delete\_auth\_file
115 Passwords file for PUT and DELETE requests. Without password file, it will not
116 be possible to, PUT new files to the server or DELETE existing ones. PUT and
117 DELETE requests might still be handled by Lua scripts and CGI paged.
118
119 ### cgi\_interpreter
120 Path to an executable to use as CGI interpreter for __all__ CGI scripts
121 regardless of the script file extension. If this option is not set (which is
122 the default), Civetweb looks at first line of a CGI script,
123 [shebang line](http://en.wikipedia.org/wiki/Shebang_(Unix\)), for an
124 interpreter (not only on Linux and Mac but also for Windows).
125
126 For example, if both PHP and Perl CGIs are used, then
127 `#!/path/to/php-cgi.exe` and `#!/path/to/perl.exe` must be first lines of the
128 respective CGI scripts. Note that paths should be either full file paths,
129 or file paths relative to the current working directory of the civetweb
130 server. If civetweb is started by mouse double-click on Windows, the current
131 working directory is the directory where the civetweb executable is located.
132
133 If all CGIs use the same interpreter, for example they are all PHP, it is
134 more efficient to set `cgi_interpreter` to the path to `php-cgi.exe`.
135 The shebang line in the CGI scripts can be omitted in this case.
136 Note that PHP scripts must use `php-cgi.exe` as executable, not `php.exe`.
137
138 ### protect\_uri
139 Comma separated list of URI=PATH pairs, specifying that given
140 URIs must be protected with password files specified by PATH.
141 All Paths must be full file paths.
142
143 ### authentication_domain `mydomain.com`
144 Authorization realm used for HTTP digest authentication. This domain is
145 used in the encoding of the `.htpasswd` authorization files as well.
146 Changing the domain retroactively will render the existing passwords useless.
147
148 ### ssi\_pattern `**.shtml$|**.shtm$`
149 All files that match `ssi_pattern` are treated as Server Side Includes (SSI).
150
151 SSI is a simple interpreted server-side scripting language which is most
152 commonly used to include the contents of another file into a web page.
153 It can be useful when it is desirable to include a common piece
154 of code throughout a website, for example, headers and footers.
155
156 In order for a webpage to recognize an SSI-enabled HTML file, the filename
157 should end with a special extension, by default the extension should be
158 either `.shtml` or `.shtm`. These extentions may be changed using the
159 `ssi_pattern` option.
160
161 Unknown SSI directives are silently ignored by civetweb. Currently, two SSI
162 directives are supported, `<!--#include ...>` and
163 `<!--#exec "command">`. Note that the `<!--#include ...>` directive supports
164 three path specifications:
165
166 <!--#include virtual="path"> Path is relative to web server root
167 <!--#include abspath="path"> Path is absolute or relative to
168 web server working dir
169 <!--#include file="path">, Path is relative to current document
170 <!--#include "path">
171
172 The `include` directive may be used to include the contents of a file or the
173 result of running a CGI script. The `exec` directive is used to execute a
174 command on a server, and show the output that would have been printed to
175 stdout (the terminal window) otherwise. Example:
176
177 <!--#exec "ls -l" -->
178
179 For more information on Server Side Includes, take a look at the Wikipedia:
180 [Server Side Includes](http://en.wikipedia.org/wiki/Server_Side_Includes)
181
182 ### throttle
183 Limit download speed for clients. `throttle` is a comma-separated
184 list of key=value pairs, where key could be:
185
186 * limit speed for all connections
187 x.x.x.x/mask limit speed for specified subnet
188 uri_prefix_pattern limit speed for given URIs
189
190 The value is a floating-point number of bytes per second, optionally
191 followed by a `k` or `m` character, meaning kilobytes and
192 megabytes respectively. A limit of 0 means unlimited rate. The
193 last matching rule wins. Examples:
194
195 *=1k,10.0.0.0/8=0 limit all accesses to 1 kilobyte per second,
196 but give connections the from 10.0.0.0/8 subnet
197 unlimited speed
198
199 /downloads/=5k limit accesses to all URIs in `/downloads/` to
200 5 kilobytes per second. All other accesses are unlimited
201
202 ### access\_log\_file
203 Path to a file for access logs. Either full path, or relative to the current
204 working directory. If absent (default), then accesses are not logged.
205
206 ### enable\_directory\_listing `yes`
207 Enable directory listing, either `yes` or `no`.
208
209 ### error\_log\_file
210 Path to a file for error logs. Either full path, or relative to the current
211 working directory. If absent (default), then errors are not logged.
212
213 ### global\_auth\_file
214 Path to a global passwords file, either full path or relative to the current
215 working directory. If set, per-directory `.htpasswd` files are ignored,
216 and all requests are authorized against that file.
217
218 The file has to include the realm set through `authentication_domain` and the
219 password in digest format:
220
221 user:realm:digest
222 test:test.com:ce0220efc2dd2fad6185e1f1af5a4327
223
224 Password files may be generated using `civetweb -A` as explained above, or
225 online tools e.g. [this generator](http://www.askapache.com/online-tools/htpasswd-generator).
226
227 ### index\_files `index.xhtml,index.html,index.htm,index.cgi,index.shtml,index.php`
228 Comma-separated list of files to be treated as directory index files.
229 If more than one matching file is present in a directory, the one listed to the left
230 is used as a directory index.
231
232 In case built-in Lua support has been enabled, `index.lp,index.lsp,index.lua`
233 are additional default index files, ordered before `index.cgi`.
234
235 ### enable\_keep\_alive `no`
236 Enable connection keep alive, either `yes` or `no`.
237
238 Experimental feature. Allows clients to reuse TCP connection for subsequent
239 HTTP requests, which improves performance.
240 For this to work when using request handlers it is important to add the
241 correct Content-Length HTTP header for each request. If this is forgotten the
242 client will time out.
243
244 ### access\_control\_list
245 An Access Control List (ACL) allows restrictions to be put on the list of IP
246 addresses which have access to the web server. In the case of the Civetweb
247 web server, the ACL is a comma separated list of IP subnets, where each
248 subnet is pre-pended by either a `-` or a `+` sign. A plus sign means allow,
249 where a minus sign means deny. If a subnet mask is omitted, such as `-1.2.3.4`,
250 this means to deny only that single IP address.
251
252 Subnet masks may vary from 0 to 32, inclusive. The default setting is to allow
253 all accesses. On each request the full list is traversed, and
254 the last match wins. Examples:
255
256 -0.0.0.0/0,+192.168/16 deny all accesses, only allow 192.168/16 subnet
257
258 To learn more about subnet masks, see the
259 [Wikipedia page on Subnetwork](http://en.wikipedia.org/wiki/Subnetwork).
260
261 ### extra\_mime\_types
262 Extra mime types, in tha form `extension1=type1,exten-sion2=type2,...`.
263 See the [Wikipedia page on Internet media types](http://en.wikipedia.org/wiki/Internet_media_type).
264 Extension must include a leading dot. Example:
265 `.cpp=plain/text,.java=plain/text`
266
267 ### listening\_ports `8080`
268 Comma-separated list of ports to listen on. If the port is SSL, a
269 letter `s` must be appended, for example, `80,443s` will open
270 port 80 and port 443, and connections on port 443 will be SSL-ed.
271 For non-SSL ports, it is allowed to append letter `r`, meaning 'redirect'.
272 Redirect ports will redirect all their traffic to the first configured
273 SSL port. For example, if `listening_ports` is `80r,443s`, then all
274 HTTP traffic coming at port 80 will be redirected to HTTPS port 443.
275
276 It is possible to specify an IP address to bind to. In this case,
277 an IP address and a colon must be pre-pended to the port number.
278 For example, to bind to a loopback interface on port 80 and to
279 all interfaces on HTTPS port 443, use `127.0.0.1:80,443s`.
280
281 If the server is built with IPv6 support, `[::]:8080` can be used to
282 listen to connections to port 8080 from both, IPv4 and IPv6.
283 IPv6 addresses of network interfaces can be specified as well,
284 e.g. `[::1]:8080` for the IPv6 loopback interface.
285
286 ### document\_root `.`
287 A directory to serve. By default, the current working directory is served.
288 The current directory is commonly referenced as dot (`.`).
289
290 ### ssl\_certificate
291 Path to the SSL certificate file. This option is only required when at least
292 one of the `listening\_ports` is SSL. The file must be in PEM format,
293 and it must have both, private key and certificate, see for example
294 [ssl_cert.pem](https://github.com/civetweb/civetweb/blob/master/resources/ssl_cert.pem)
295 A description how to create a certificate can be found in doc/OpenSSL.md
296
297 ### num\_threads `50`
298 Number of worker threads. Civetweb handles each incoming connection in a
299 separate thread. Therefore, the value of this option is effectively the number
300 of concurrent HTTP connections Civetweb can handle.
301
302 ### run\_as\_user
303 Switch to given user credentials after startup. Usually, this option is
304 required when civetweb needs to bind on privileged ports on UNIX. To do
305 that, civetweb needs to be started as root. From a security point of view,
306 running as root is not advisable, therefore this option can be used to drop
307 privileges. Example:
308
309 civetweb -listening_ports 80 -run_as_user webserver
310
311 ### url\_rewrite\_patterns
312 Comma-separated list of URL rewrites in the form of
313 `uri_pattern=file_or_directory_path`. When Civetweb receives any request,
314 it constructs the file name to show by combining `document_root` and the URI.
315 However, if the rewrite option is used and `uri_pattern` matches the
316 requested URI, then `document_root` is ignored. Instead,
317 `file_or_directory_path` is used, which should be a full path name or
318 a path relative to the web server's current working directory. Note that
319 `uri_pattern`, as all civetweb patterns, is a prefix pattern.
320
321 This makes it possible to serve many directories outside from `document_root`,
322 redirect all requests to scripts, and do other tricky things. For example,
323 to redirect all accesses to `.doc` files to a special script, do:
324
325 civetweb -url_rewrite_patterns **.doc$=/path/to/cgi-bin/handle_doc.cgi
326
327 Or, to imitate support for user home directories, do:
328
329 civetweb -url_rewrite_patterns /~joe/=/home/joe/,/~bill=/home/bill/
330
331 ### hide\_files\_patterns
332 A pattern for the files to hide. Files that match the pattern will not
333 show up in directory listing and return `404 Not Found` if requested. Pattern
334 must be for a file name only, not including directory names. Example:
335
336 civetweb -hide_files_patterns secret.txt|*.hide
337
338 ### request\_timeout\_ms `30000`
339 Timeout for network read and network write operations, in milliseconds.
340 If a client intends to keep long-running connection, either increase this
341 value or (better) use keep-alive messages.
342
343 ### lua\_preload\_file
344 This configuration option can be used to specify a Lua script file, which
345 is executed before the actual web page script (Lua script, Lua server page
346 or Lua websocket). It can be used to modify the Lua environment of all web
347 page scripts, e.g., by loading additional libraries or defining functions
348 required by all scripts.
349 It may be used to achieve backward compatibility by defining obsolete
350 functions as well.
351
352 ### lua\_script\_pattern `"**.lua$`
353 A pattern for files that are interpreted as Lua scripts by the server.
354 In contrast to Lua server pages, Lua scripts use plain Lua syntax.
355 An example can be found in the test directory.
356
357 ### lua\_server\_page\_pattern `**.lp$|**.lsp$`
358 Files matching this pattern are treated as Lua server pages.
359 In contrast to Lua scripts, the content of a Lua server pages is delivered
360 directly to the client. Lua script parts are delimited from the standard
361 content by including them between <? and ?> tags.
362 An example can be found in the test directory.
363
364 ### websocket\_root
365 In case civetweb is built with Lua and websocket support, Lua scripts may
366 be used for websockets as well. Since websockets use a different URL scheme
367 (ws, wss) than other http pages (http, https), the Lua scripts used for
368 websockets may also be served from a different directory. By default,
369 the document_root is used as websocket_root as well.
370
371 ### access\_control\_allow\_origin
372 Access-Control-Allow-Origin header field, used for cross-origin resource
373 sharing (CORS).
374 See the [Wikipedia page on CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing).
375
376 ### error\_pages
377 This option may be used to specify a directory for user defined error pages.
378 The error pages may be specified for an individual http status code (e.g.,
379 404 - page requested by the client not found), a group of http status codes
380 (e.g., 4xx - all client errors) or all errors. The corresponding error pages
381 must be called error404.ext, error4xx.ext or error.ext, whereas the file
382 extention may be one of the extentions specified for the index_files option.
383 See the [Wikipedia page on HTTP status codes](http://en.wikipedia.org/wiki/HTTP_status_code).
384
385 ### tcp\_nodelay `0`
386 Enable TCP_NODELAY socket option on client connections.
387
388 If set the socket option will disable Nagle's algorithm on the connection
389 which means that packets will be sent as soon as possible instead of waiting
390 for a full buffer or timeout to occur.
391
392 0 Keep the default: Nagel's algorithm enabled
393 1 Disable Nagel's algorithm for all sockets
394
395 ### static\_file\_max\_age `3600`
396 Set the maximum time (in seconds) a cache may store a static files.
397
398 This option will set the `Cache-Control: max-age` value for static files.
399 Dynamically generated content, i.e., content created by a script or callback,
400 must send cache control headers by themselfes.
401
402 A value >0 corresponds to a maximum allowed caching time in seconds.
403 This value should not exceed one year (RFC 2616, Section 14.21).
404 A value of 0 will send "do not cache" headers for all static files.
405 For values <0 and values >31622400, the behavior is undefined.
406
407 ### decode\_url `yes`
408 URL encoded request strings are decoded in the server, unless it is disabled
409 by setting this option to `no`.
410
411 ### ssl_verify_peer `no`
412 Enable client's certificate verification by the server.
413
414 ### ssl_ca_path
415 Name of a directory containing trusted CA certificates. Each file in the
416 directory must contain only a single CA certificate. The files must be named
417 by the subject name’s hash and an extension of “.0”. If there is more than one
418 certificate with the same subject name they should have extensions ".0", ".1",
419 ".2" and so on respectively.
420
421 ### ssl_ca_file
422 Path to a .pem file containing trusted certificates. The file may contain
423 more than one certificate.
424
425 ### ssl_verify_depth `9`
426 Sets maximum depth of certificate chain. If client's certificate chain is longer
427 than the depth set here connection is refused.
428
429 ### ssl_default_verify_paths `yes`
430 Loads default trusted certificates locations set at openssl compile time.
431
432 ### ssl_cipher_list
433 List of ciphers to present to the client. Entries should be separated by
434 colons, commas or spaces.
435
436 ALL All available ciphers
437 ALL:!eNULL All ciphers excluding NULL ciphers
438 AES128:!MD5 AES 128 with digests other than MD5
439
440 See [this entry](https://www.openssl.org/docs/manmaster/apps/ciphers.html) in
441 OpenSSL documentation for full list of options and additional examples.
442
443 ### ssl_protocol_version `0`
444 Sets the minimal accepted version of SSL/TLS protocol according to the table:
445
446 Protocols | Value
447 ------------ | -------------
448 SSL2+SSL3+TLS1.0+TLS1.1+TLS1.2 | 0
449 SSL3+TLS1.0+TLS1.1+TLS1.2 | 1
450 TLS1.0+TLS1.1+TLS1.2 | 2
451 TLS1.1+TLS1.2 | 3
452 TLS1.2 | 4
453
454 ### ssl_short_trust `no`
455 Enables the use of short lived certificates. This will allow for the certificates
456 and keys specified in `ssl_certificate`, `ssl_ca_file` and `ssl_ca_path` to be
457 exchanged and reloaded while the server is running.
458
459 In an automated environment it is advised to first write the new pem file to
460 a different filename and then to rename it to the configured pem file name to
461 increase performance while swapping the certificate.
462
463 Disk IO performance can be improved when keeping the certificates and keys stored
464 on a tmpfs (linux) on a system with very high throughput.
465
466 # Lua Scripts and Lua Server Pages
467 Pre-built Windows and Mac civetweb binaries have built-in Lua scripting
468 support as well as support for Lua Server Pages.
469
470 Lua scripts (default extension: *.lua) use plain Lua syntax.
471 The body of the script file is not sent directly to the client,
472 the Lua script must send header and content of the web page by calling
473 the function mg.write(text).
474
475 Lua Server Pages (default extensions: *.lsp, *.lp) are html pages containing
476 script elements similar to PHP, using the Lua programming language instead of
477 PHP. Lua script elements must be enclosed in `<? ?>` blocks, and can appear
478 anywhere on the page. Furthermore, Lua Server Pages offer the opportunity to
479 insert the content of a variable by enclosing the Lua variable name in
480 `<?= ?>` blocks, similar to PHP.
481 For example, to print the current weekday name and the URI of the current
482 page, one can write:
483
484 <p>
485 <span>Today is:</span>
486 <? mg.write(os.date("%A")) ?>
487 </p>
488 <p>
489 URI is <?=mg.request_info.uri?>
490 </p>
491
492 Lua is known for it's speed and small size. Civetweb currently uses Lua
493 version 5.2.4. The documentation for it can be found in the
494 [Lua 5.2 reference manual](http://www.lua.org/manual/5.2/).
495
496
497 Note that this example uses function `mg.write()`, which sends data to the
498 web client. Using `mg.write()` is the way to generate web content from inside
499 Lua code. In addition to `mg.write()`, all standard Lua library functions
500 are accessible from the Lua code (please check the reference manual for
501 details). Lua functions working on files (e.g., `io.open`) use a path
502 relative to the working path of the civetweb process. The web server content
503 is located in the path `mg.document_root`.
504 Information on the request is available in the `mg.request_info`
505 object, like the request method, all HTTP headers, etcetera.
506
507 [page2.lua](https://github.com/civetweb/civetweb/blob/master/test/page2.lua)
508 is an example for a plain Lua script.
509
510 [page2.lp](https://github.com/civetweb/civetweb/blob/master/test/page2.lp)
511 is an example for a Lua Server Page.
512
513 Both examples show the content of the `mg.request_info` object as the page
514 content. Please refer to `struct mg_request_info` definition in
515 [civetweb.h](https://github.com/civetweb/civetweb/blob/master/include/civetweb.h)
516 to see additional information on the elements of the `mg.request_info` object.
517
518 Civetweb also provides access to the [SQlite3 database](http://www.sqlite.org/)
519 through the [LuaSQLite3 interface](http://lua.sqlite.org/index.cgi/doc/tip/doc/lsqlite3.wiki)
520 in Lua. Examples are given in
521 [page.lua](https://github.com/civetweb/civetweb/blob/master/test/page.lua) and
522 [page.lp](https://github.com/civetweb/civetweb/blob/master/test/page.lp).
523
524
525 Civetweb exports the following functions to Lua:
526
527 mg (table):
528
529 mg.read() -- reads a chunk from POST data, returns it as a string
530 mg.write(str) -- writes string to the client
531 mg.include(path) -- sources another Lua file
532 mg.redirect(uri) -- internal redirect to a given URI
533 mg.onerror(msg) -- error handler, can be overridden
534 mg.version -- a string that holds Civetweb version
535 mg.document_root -- a string that holds the document root directory
536 mg.auth_domain -- a string that holds the HTTP authentication domain
537 mg.get_var(str, varname) -- extract variable from (query) string
538 mg.get_cookie(str, cookie) -- extract cookie from a string
539 mg.get_mime_type(filename) -- get MIME type of a file
540 mg.send_file(filename) -- send a file, including MIME type
541 mg.url_encode(str) -- URL encode a string
542 mg.url_decode(str, [form]) -- URL decode a string. If form=true, replace + by space.
543 mg.base64_encode(str) -- BASE64 encode a string
544 mg.base64_decode(str) -- BASE64 decode a string
545 mg.md5(str) -- return the MD5 hash of a string
546 mg.keep_alive(bool) -- allow/forbid to use http keep-alive for this request
547 mg.request_info -- a table with the following request information
548 .remote_addr -- IP address of the client as string
549 .remote_port -- remote port number
550 .server_port -- server port number
551 .request_method -- HTTP method (e.g.: GET, POST)
552 .http_version -- HTTP protocol version (e.g.: 1.1)
553 .uri -- resource name
554 .query_string -- query string if present, nil otherwise
555 .script_name -- name of the Lua script
556 .https -- true if accessed by https://, false otherwise
557 .remote_user -- user name if authenticated, nil otherwise
558
559 connect (function):
560
561 -- Connect to the remote TCP server. This function is an implementation
562 -- of simple socket interface. It returns a socket object with three
563 -- methods: send, recv, close, which are synchronous (blocking).
564 -- connect() throws an exception on connection error.
565 connect(host, port, use_ssl)
566
567 -- Example of using connect() interface:
568 local host = 'code.google.com' -- IP address or domain name
569 local ok, sock = pcall(connect, host, 80, 1)
570 if ok then
571 sock:send('GET /p/civetweb/ HTTP/1.0\r\n' ..
572 'Host: ' .. host .. '\r\n\r\n')
573 local reply = sock:recv()
574 sock:close()
575 -- reply now contains the web page https://code.google.com/p/civetweb
576 end
577
578
579 **IMPORTANT: Civetweb does not send HTTP headers for Lua pages. Therefore,
580 every Lua Page must begin with a HTTP reply line and headers**, like this:
581
582 <? print('HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n') ?>
583 <html><body>
584 ... the rest of the web page ...
585
586 To serve a Lua Page, civetweb creates a Lua context. That context is used for
587 all Lua blocks within the page. That means, all Lua blocks on the same page
588 share the same context. If one block defines a variable, for example, that
589 variable is visible in all block that follow.
590
591 ## Websockets for Lua
592 Civetweb offers support for websockets in Lua as well. In contrast to plain
593 Lua scripts and Lua server pages, Lua websocket scripts are shared by all clients.
594
595 Lua websocket scripts must define a few functions:
596 open(arg) -- callback to accept or reject a connection
597 ready(arg) -- called after a connection has been established
598 data(arg) -- called when the server receives data from the client
599 close(arg) -- called when a websocket connection is closed
600 All function are called with one argument of type table with at least one field
601 "client" to identify the client. When "open" is called, the argument table additionally
602 contains the "request_info" table as defined above. For the "data" handler, an
603 additional field "data" is available. The functions "open", "ready" and "data"
604 must return true in order to keep the connetion open.
605
606 Lua websocket pages do support single shot (timeout) and interval timers.
607
608 An example is shown in
609 [websocket.lua](https://github.com/civetweb/civetweb/blob/master/test/websocket.lua).
610
611
612 # Common Problems
613 - PHP doesn't work - getting empty page, or 'File not found' error. The
614 reason for that is wrong paths to the interpreter. Remember that with PHP,
615 the correct interpreter is `php-cgi.exe` (`php-cgi` on UNIX).
616 Solution: specify the full path to the PHP interpreter, e.g.:
617 `civetweb -cgi_interpreter /full/path/to/php-cgi`
618
619 - Civetweb fails to start. If Civetweb exits immediately when started, this
620 usually indicates a syntax error in the configuration file
621 (named `civetweb.conf` by default) or the command-line arguments.
622 Syntax checking is omitted from Civetweb to keep its size low. However,
623 the Manual should be of help. Note: the syntax changes from time to time,
624 so updating the config file might be necessary after executable update.
625
626 - Embedding with OpenSSL on Windows might fail because of calling convention.
627 To force Civetweb to use `__stdcall` convention, add `/Gz` compilation
628 flag in Visual Studio compiler.