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>