Annotation of embedaddon/lighttpd/doc/outdated/configuration.txt, revision 1.1.1.1
1.1 misho 1: ==================
2: Configuration File
3: ==================
4:
5: ------------
6: Module: core
7: ------------
8:
9: :Author: Jan Kneschke
10: :Date: $Date$
11: :Revision: $Revision$
12:
13: :abstract:
14: the layout of the configuration file
15:
16: .. meta::
17: :keywords: lighttpd, configuration
18:
19: .. contents:: Table of Contents
20:
21: Description
22: ===========
23:
24: Basic Syntax
25: ------------
26:
27: A BNF like notation: ::
28:
29: option : NAME = VALUE
30: merge : NAME += VALUE
31: NAME : modulename.key
32: VALUE : ( <string> | <integer> | <boolean> | <array> | VALUE [ + VALUE ]*)
33: <string> : "text"
34: <integer>: digit*
35: <boolean>: ( "enable" | "disable" )
36: <array> : "(" [ <string> "=>" ] <value> [, [ <string> "=>" ] <value> ]* ")"
37: INCLUDE : "include" VALUE
38: INCLUDE_SHELL : "include_shell" STRING_VALUE
39:
40: Example
41: -------
42:
43: ::
44:
45: # default document-root
46: server.document-root = "/var/www/example.org/pages/"
47:
48: # TCP port
49: server.port = 80
50:
51: # selecting modules
52: server.modules = ( "mod_access", "mod_rewrite" )
53:
54: # variables, computed when config is read.
55: var.mymodule = "foo"
56: server.modules += ( "mod_" + var.mymodule )
57: # var.PID is initialised to the pid of lighttpd before config is parsed
58:
59: # include, relative to dirname of main config file
60: include "mime.types.conf"
61:
62: # read configuration from output of a command
63: include_shell "/usr/local/bin/confmimetype /etc/mime.types"
64:
65:
66: Conditional Configuration
67: =========================
68:
69: Most options can be configured conditionally by using the following syntax
70: (including nesting).
71:
72: ::
73:
74: <field> <operator> <value> {
75: ...
76: <field> <operator> <value> {
77: ... nesting: match only when parent match
78: }
79: }
80: else <field> <operator> <value> {
81: ... the "else if" block
82: }
83:
84: where <field> is one of one of the following:
85:
86: $HTTP["cookie"]
87: match on cookie
88: $HTTP["scheme"]
89: match on scheme
90: $HTTP["host"]
91: match on host
92: $HTTP["useragent"]
93: $HTTP["user-agent"]
94: match on useragent
95: $HTTP["referer"]
96: match on referer
97: $HTTP["method"]
98: math on the http method
99: $HTTP["url"]
100: match on url
101: $HTTP["query-string"]
102: match on the (not decoded) query-string
103: $HTTP["remoteip"]
104: $HTTP["remote-ip"]
105: match on the remote IP or a remote Network
106: $HTTP["language"]
107: match on the Accept-Language header
108: $SERVER["socket"]
109: match on socket. Value must be on the format "ip:port" where ip is an IP
110: address and port a port number. Only equal match (==) is supported.
111: It also binds the daemon to this socket. Use this if you want to do IP/port-
112: based virtual hosts.
113:
114: <operator> is one of:
115:
116: ==
117: string equal match
118: !=
119: string not equal match
120: =~
121: perl style regular expression match
122: !~
123: perl style regular expression not match
124:
125: and <value> is either a quoted ("") literal string or regular expression.
126:
127:
128: Example
129: -------
130:
131: ::
132:
133: # disable directory-listings for /download/*
134: dir-listing.activate = "enable"
135: $HTTP["url"] =~ "^/download/" {
136: dir-listing.activate = "disable"
137: }
138:
139: # handish virtual hosting
140: # map all domains of a top-level-domain to a single document-root
141: $HTTP["host"] =~ "(^|\.)example\.org$" {
142: server.document-root = "/var/www/htdocs/example.org/pages/"
143: }
144:
145: # multiple sockets
146: $SERVER["socket"] == "127.0.0.1:81" {
147: server.document-root = "..."
148: }
149:
150: $SERVER["socket"] == "127.0.0.1:443" {
151: ssl.pemfile = "/var/www/certs/localhost.pem"
152: ssl.engine = "enable"
153:
154: server.document-root = "/var/www/htdocs/secure.example.org/pages/"
155: }
156:
157: # deny access for all googlebot
158: $HTTP["useragent"] =~ "Google" {
159: url.access-deny = ( "" )
160: }
161:
162: # deny access for all image stealers
163: $HTTP["referer"] !~ "^($|http://www\.example\.org)" {
164: url.access-deny = ( ".jpg", ".jpeg", ".png" )
165: }
166:
167: # deny the access to www.example.org to all user which
168: # are not in the 10.0.0.0/8 network
169: $HTTP["host"] == "www.example.org" {
170: $HTTP["remoteip"] != "10.0.0.0/8" {
171: url.access-deny = ( "" )
172: }
173: }
174:
175: Using variables
176: ===============
177:
178: You can set your own variables in the configuration to simplify your config.
179: ::
180:
181: var.basedir = "/home/www/servers/"
182: $HTTP["host"] == "www.example.org" {
183: server.name = "www.example.org"
184: include "incl-base.conf"
185: }
186:
187: in incl-base.conf:
188: server.document-root = basedir + server.name + "/pages/"
189: accesslog.filename = basedir + server.name + "/logs/access.log"
190:
191: You can also use environement variables or the default variables var.PID and
192: var.CWD: ::
193:
194: var.basedir = env.LIGHTTPDBASE
195:
196: $HTTP["host"] == "www.example.org" {
197: server.name = "www.example.org"
198: include "incl-base.conf"
199: include "incl-fastcgi.conf"
200: }
201:
202: in incl-fastcgi.conf:
203: fastcgi.server = ( ... => ((
204: "socket" => basedir + server.name + "/tmp/fastcgi-" + PID + ".sock"
205: )) )
206:
207: Or like the lighttpd script for rails does:
208:
209: var.basedir = var.CWD
210:
211: server.document-root = basedir + "/public/"
212:
213: Global context
214: ==============
215:
216: ::
217:
218: global {
219: ...
220: }
221:
222: You don't need it in the main configuration file. But you might have
223: difficulty setting server wide configuration inside a included-file from
224: conditionals.
225:
226: Example
227: -------
228:
229: ::
230:
231: in lighttpd.conf:
232: server.modules = ()
233: $HTTP["host"] == "www.example.org" {
234: include "incl-php.conf"
235: }
236:
237: in incl-php.conf:
238: global {
239: server.modules += ("mod_fastcgi")
240: static-file.exclude-extensions += (".php")
241: }
242: fastcgi.server = "..."
243:
244: Options
245: =======
246:
247: server module
248: -------------
249:
250: main sections
251: `````````````
252:
253: server.document-root
254: document-root of the webserver
255:
256: This variable has the specified as it will be used for all requests
257: without a Host: header and for all with a know hostname which you
258: might have specified with one of the above conditionals.
259:
260: Default: no default, required
261:
262: server.bind
263: IP address, hostname or absolute path to the unix-domain socket the server
264: listen on.
265:
266: Default: bind to all interfaces
267:
268: Example: ::
269:
270: server.bind = "127.0.0.1"
271: server.bind = "www.example.org"
272: server.bind = "/tmp/lighttpd.socket"
273:
274: server.port
275: tcp-port to bind the server to
276:
277: .. note:: port belows 1024 require root-permissions
278:
279: Default: 80 (443 if ssl is enabled)
280:
281: server.use-ipv6
282: bind to the IPv6 socket
283:
284: server.defer-accept
285: set TCP_DEFER_ACCEPT to the specified value on the socket if the value is > 0
286: and TCP_DEFER_ACCEPT is available on the platform (linux2.4+)
287:
288: default: 0
289:
290: server.tag
291: set the string returned by the Server: response header
292:
293: Default: lighttpd <current-version>
294:
295: server.errorlog
296: pathname of the error-log
297:
298: Default: either STDERR or ``server.errorlog-use-syslog``
299:
300: server.errorlog-use-syslog
301: send errorlog to syslog
302:
303: Default: disabled
304:
305: server.chroot
306: root-directory of the server
307:
308: NOTE: requires root-permissions
309:
310: server.username
311: username used to run the server
312:
313: NOTE: requires root-permissions
314:
315: server.groupname
316: groupname used to run the server
317:
318: NOTE: requires root-permissions
319:
320: server.follow-symlink
321: allow to follow-symlinks
322:
323: Default: enabled
324:
325: index-file.names
326: list of files to search for if a directory is requested
327: e.g.: ::
328:
329: index-file.names = ( "index.php", "index.html",
330: "index.htm", "default.htm" )
331:
332: if a name starts with slash this file will be used a index generator
333: for all directories.
334:
335: server.modules
336: modules to load
337:
338: .. note:: the order of the modules is important.
339:
340: The modules are executed in the order as they are specified. Loading
341: mod_auth AFTER mod_fastcgi might disable authentication for fastcgi
342: backends (if check-local is disabled).
343:
344: As auth should be done first, move it before all executing modules (like
345: proxy, fastcgi, scgi and cgi).
346:
347: rewrites, redirects and access should be first, followed by auth and
348: the docroot plugins.
349:
350: Afterwards the external handlers like fastcgi, cgi, scgi and proxy and
351: at the bottom the post-processing plugins like mod_accesslog.
352:
353: e.g.: ::
354:
355: server.modules = ( "mod_rewrite",
356: "mod_redirect",
357: "mod_alias",
358: "mod_access",
359: "mod_auth",
360: "mod_status",
361: "mod_simple_vhost",
362: "mod_evhost",
363: "mod_userdir",
364: "mod_secdownload",
365: "mod_fastcgi",
366: "mod_proxy",
367: "mod_cgi",
368: "mod_ssi",
369: "mod_compress",
370: "mod_usertrack",
371: "mod_expire",
372: "mod_rrdtool",
373: "mod_accesslog" )
374:
375: Starting with lighttpd 1.4.0 three default modules are loaded automaticly:
376:
377: - mod_indexfile
378: - mod_dirlisting
379: - mod_staticfile
380:
381: server.event-handler
382: set the event handler
383:
384: Default: "poll"
385:
386: server.pid-file
387: set the name of the .pid-file where the PID of the server should be placed.
388: This option is used in combination with a start-script and the daemon mode
389:
390: Default: not set
391:
392: server.max-request-size
393: maximum size in kbytes of the request (header + body). Only applies to POST
394: requests.
395:
396: Default: 2097152 (2GB)
397:
398: server.max-worker
399: number of worker processes to spawn. This is usually only needed on servers
400: which are fairly loaded and the network handler calls delay often (e.g. new
401: requests are not handled instantaneously).
402:
403: Default: 0
404:
405: server.name
406: name of the server/virtual server
407:
408: Default: hostname
409:
410: server.max-keep-alive-requests
411: maximum number of request within a keep-alive session before the server
412: terminates the connection
413:
414: Default: 128
415:
416: server.max-keep-alive-idle
417: maximum number of seconds until a idling keep-alive connection is droped
418:
419: Default: 30
420:
421: server.max-read-idle
422: maximum number of seconds until a waiting, non keep-alive read times out
423: and closes the connection
424:
425: Default: 60
426:
427: server.max-write-idle
428: maximum number of seconds until a waiting write call times out and closes
429: the connection
430:
431: Default: 360
432:
433: server.error-handler-404
434: uri to call if the requested file results in a 404
435:
436: Default: not set
437:
438: Example: ::
439:
440: server.error-handler-404 = "/error-404.php"
441:
442: server.protocol-http11
443: defines if HTTP/1.1 is allowed or not.
444:
445: Default: enabled
446:
447: server.range-requests
448: defines if range requests are allowed or not.
449:
450: Default: enabled
451:
452:
453: SSL engine
454: ``````````
455:
456: ssl.pemfile
457: path to the PEM file for SSL support
458:
459: debugging
460: `````````
461:
462: debug.dump-unknown-headers
463: enables listing of internally unhandled HTTP-headers
464:
465: e.g. ::
466:
467: debug.dump-unknown-headers = "enable"
468:
469: mimetypes
470: `````````
471:
472: mimetype.assign
473: list of known mimetype mappings
474: NOTE: if no mapping is given "application/octet-stream" is used
475:
476: e.g.: ::
477:
478: mimetype.assign = ( ".png" => "image/png",
479: ".jpg" => "image/jpeg",
480: ".jpeg" => "image/jpeg",
481: ".html" => "text/html",
482: ".txt" => "text/plain" )
483:
484: The list is compared top down and the first match is taken. This is
485: important if you have matches like: ::
486:
487: ".tar.gz" => "application/x-tgz",
488: ".gz" => "application/x-gzip",
489:
490: If you want to set another default mimetype use: ::
491:
492: ...,
493: "" => "text/plain" )
494:
495: as the last entry in the list.
496:
497: mimetype.use-xattr
498: If available, use the XFS-style extended attribute interface to
499: retrieve the "Content-Type" attribute on each file, and use that as the
500: mime type. If it's not defined or not available, fall back to the
501: mimetype.assign assignment.
502:
503: e.g.: ::
504:
505: mimetype.use-xattr = "enable"
506:
507: on shell use:
508:
509: $ attr -s Content-Type -V image/svg svgfile.svg
510:
511: or
512:
513: $ attr -s Content-Type -V text/html indexfile
514:
515:
516: debugging
517: `````````
518:
519: debug.log-request-header
520: default: disabled
521:
522: debug.log-response-header
523: default: disabled
524:
525: debug.log-file-not-found
526: default: disabled
527:
528: debug.log-request-handling
529: default: disabled
530:
531: debug.log-ssl-noise
532: default: disabled
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>