123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540 |
- ==================
- Configuration File
- ==================
- ------------
- Module: core
- ------------
- :Author: Jan Kneschke
- :Date: $Date$
- :Revision: $Revision$
- :abstract:
- the layout of the configuration file
- .. meta::
- :keywords: lighttpd, configuration
- .. contents:: Table of Contents
- Description
- ===========
- Basic Syntax
- ------------
- A BNF like notation: ::
- option : NAME = VALUE
- merge : NAME += VALUE
- NAME : modulename.key
- VALUE : ( <string> | <integer> | <boolean> | <array> | VALUE [ + VALUE ]*)
- <string> : "text"
- <integer>: digit*
- <boolean>: ( "enable" | "disable" )
- <array> : "(" [ <string> "=>" ] <value> [, [ <string> "=>" ] <value> ]* ")"
- INCLUDE : "include" VALUE
- INCLUDE_SHELL : "include_shell" STRING_VALUE
- Example
- -------
- ::
- # default document-root
- server.document-root = "/var/www/example.org/pages/"
- # TCP port
- server.port = 80
- # selecting modules
- server.modules = ( "mod_access", "mod_rewrite" )
- # variables, computed when config is read.
- var.mymodule = "foo"
- server.modules += ( "mod_" + var.mymodule )
- # var.PID is initialised to the pid of lighttpd before config is parsed
- # include, relative to dirname of main config file
- include "mime.types.conf"
- # read configuration from output of a command
- include_shell "/usr/local/bin/confmimetype /etc/mime.types"
- Conditional Configuration
- =========================
- Most options can be configured conditionally by using the following syntax
- (including nesting).
- ::
- <field> <operator> <value> {
- ...
- <field> <operator> <value> {
- ... nesting: match only when parent match
- }
- }
- else <field> <operator> <value> {
- ... the "else if" block
- }
- where <field> is one of one of the following:
- $HTTP["cookie"]
- match on cookie
- $HTTP["scheme"]
- match on scheme
- $HTTP["host"]
- match on host
- $HTTP["useragent"]
- $HTTP["user-agent"]
- match on useragent
- $HTTP["referer"]
- match on referer
- $HTTP["method"]
- math on the http method
- $HTTP["url"]
- match on url
- $HTTP["query-string"]
- match on the (not decoded) query-string
- $HTTP["remoteip"]
- $HTTP["remote-ip"]
- match on the remote IP or a remote Network
- $HTTP["language"]
- match on the Accept-Language header
- $SERVER["socket"]
- match on socket. Value must be on the format "ip:port" where ip is an IP
- address and port a port number. Only equal match (==) is supported.
- It also binds the daemon to this socket. Use this if you want to do IP/port-
- based virtual hosts.
- <operator> is one of:
- ==
- string equal match
- !=
- string not equal match
- =~
- perl style regular expression match
- !~
- perl style regular expression not match
- and <value> is either a quoted ("") literal string or regular expression.
- Example
- -------
- ::
- # disable directory-listings for /download/*
- dir-listing.activate = "enable"
- $HTTP["url"] =~ "^/download/" {
- dir-listing.activate = "disable"
- }
- # handish virtual hosting
- # map all domains of a top-level-domain to a single document-root
- $HTTP["host"] =~ "(^|\.)example\.org$" {
- server.document-root = "/var/www/htdocs/example.org/pages/"
- }
- # multiple sockets
- $SERVER["socket"] == "127.0.0.1:81" {
- server.document-root = "..."
- }
- $SERVER["socket"] == "127.0.0.1:443" {
- ssl.pemfile = "/var/www/certs/localhost.pem"
- ssl.engine = "enable"
- server.document-root = "/var/www/htdocs/secure.example.org/pages/"
- }
- # deny access for all googlebot
- $HTTP["useragent"] =~ "Google" {
- url.access-deny = ( "" )
- }
- # deny access for all image stealers
- $HTTP["referer"] !~ "^($|http://www\.example\.org)" {
- url.access-deny = ( ".jpg", ".jpeg", ".png" )
- }
- # deny the access to www.example.org to all user which
- # are not in the 10.0.0.0/8 network
- $HTTP["host"] == "www.example.org" {
- $HTTP["remoteip"] != "10.0.0.0/8" {
- url.access-deny = ( "" )
- }
- }
- Using variables
- ===============
- You can set your own variables in the configuration to simplify your config.
- ::
- var.basedir = "/home/www/servers/"
- $HTTP["host"] == "www.example.org" {
- server.name = "www.example.org"
- include "incl-base.conf"
- }
- in incl-base.conf:
- server.document-root = basedir + server.name + "/pages/"
- accesslog.filename = basedir + server.name + "/logs/access.log"
- You can also use environment variables or the default variables var.PID and
- var.CWD: ::
- var.basedir = env.LIGHTTPDBASE
- $HTTP["host"] == "www.example.org" {
- server.name = "www.example.org"
- include "incl-base.conf"
- include "incl-fastcgi.conf"
- }
- in incl-fastcgi.conf:
- fastcgi.server = ( ... => ((
- "socket" => basedir + server.name + "/tmp/fastcgi-" + PID + ".sock"
- )) )
- Or like the lighttpd script for rails does:
- var.basedir = var.CWD
- server.document-root = basedir + "/public/"
- Global context
- ==============
- ::
- global {
- ...
- }
- You don't need it in the main configuration file. But you might have
- difficulty setting server wide configuration inside a included-file from
- conditionals.
- Example
- -------
- ::
- in lighttpd.conf:
- server.modules = ()
- $HTTP["host"] == "www.example.org" {
- include "incl-php.conf"
- }
- in incl-php.conf:
- global {
- server.modules += ("mod_fastcgi")
- static-file.exclude-extensions += (".php")
- }
- fastcgi.server = "..."
- Options
- =======
- server module
- -------------
- main sections
- `````````````
- server.document-root
- document-root of the webserver
- This variable has the specified as it will be used for all requests
- without a Host: header and for all with a know hostname which you
- might have specified with one of the above conditionals.
- Default: no default, required
- server.bind
- IP address, hostname or absolute path to the unix-domain socket the server
- listen on.
- Default: bind to all interfaces
- Example: ::
- server.bind = "127.0.0.1"
- server.bind = "www.example.org"
- server.bind = "/tmp/lighttpd.socket"
- server.port
- tcp-port to bind the server to
- .. note:: port belows 1024 require root-permissions
- Default: 80 (443 if ssl is enabled)
- server.use-ipv6
- bind to the IPv6 socket
- server.defer-accept
- set TCP_DEFER_ACCEPT to the specified value on the socket if the value is > 0
- and TCP_DEFER_ACCEPT is available on the platform (linux2.4+)
- Default: 0
- server.bsd-accept-filter
- set SO_ACCEPTFILTER on listen sockets (*BSD systems, e.g. FreeBSD)
- e.g. server.bsd-accept-filter = "httpready"
- or server.bsd-accept-filter = "dataready"
- Default: "" (none)
- server.tag
- set the string returned by the Server: response header
- Default: lighttpd <current-version>
- server.errorlog
- pathname of the error-log
- Default: either STDERR or ``server.errorlog-use-syslog``
- server.errorlog-use-syslog
- send errorlog to syslog
- Default: disabled
- server.chroot
- root-directory of the server
- NOTE: requires root-permissions
- server.username
- username used to run the server
- NOTE: requires root-permissions
- server.groupname
- groupname used to run the server
- NOTE: requires root-permissions
- server.follow-symlink
- allow to follow-symlinks
- Default: enabled
- index-file.names
- list of files to search for if a directory is requested
- e.g.: ::
- index-file.names = ( "index.php", "index.html",
- "index.htm", "default.htm" )
- if a name starts with slash this file will be used a index generator
- for all directories.
- server.modules
- modules to load
- .. note:: the order of the modules is important.
- The modules are executed in the order as they are specified. Loading
- mod_auth AFTER mod_fastcgi might disable authentication for fastcgi
- backends (if check-local is disabled).
- As auth should be done first, move it before all executing modules (like
- proxy, fastcgi, scgi and cgi).
- rewrites, redirects and access should be first, followed by auth and
- the docroot plugins.
- Afterwards the external handlers like fastcgi, cgi, scgi and proxy and
- at the bottom the post-processing plugins like mod_accesslog.
- e.g.: ::
- server.modules = ( "mod_rewrite",
- "mod_redirect",
- "mod_alias",
- "mod_access",
- "mod_auth",
- "mod_authn_file",
- "mod_status",
- "mod_simple_vhost",
- "mod_evhost",
- "mod_userdir",
- "mod_secdownload",
- "mod_fastcgi",
- "mod_proxy",
- "mod_cgi",
- "mod_ssi",
- "mod_deflate",
- "mod_usertrack",
- "mod_expire",
- "mod_rrdtool",
- "mod_accesslog" )
- Starting with lighttpd 1.4.0 three default modules are loaded automatically:
- - mod_indexfile
- - mod_dirlisting
- - mod_staticfile
- server.event-handler
- set the event handler
- Default: "poll"
- server.pid-file
- set the name of the .pid-file where the PID of the server should be placed.
- This option is used in combination with a start-script and the daemon mode
- Default: not set
- server.max-request-size
- maximum size in kbytes of the request (header + body). Only applies to POST
- requests.
- Default: 2097152 (2GB)
- server.max-worker
- number of worker processes to spawn. This is usually only needed on servers
- which are fairly loaded and the network handler calls delay often (e.g. new
- requests are not handled instantaneously).
- Default: 0
- server.name
- name of the server/virtual server
- Default: hostname
- server.max-keep-alive-requests
- maximum number of request within a keep-alive session before the server
- terminates the connection
- Default: 128
- server.max-keep-alive-idle
- maximum number of seconds until a idling keep-alive connection is dropped
- Default: 30
- server.max-read-idle
- maximum number of seconds until a waiting, non keep-alive read times out
- and closes the connection
- Default: 60
- server.max-write-idle
- maximum number of seconds until a waiting write call times out and closes
- the connection
- Default: 360
- server.error-handler-404
- uri to call if the requested file results in a 404
- Default: not set
- Example: ::
- server.error-handler-404 = "/error-404.php"
- server.protocol-http11
- defines if HTTP/1.1 is allowed or not.
- Default: enabled
- server.range-requests
- defines if range requests are allowed or not.
- Default: enabled
- SSL engine
- ``````````
- ssl.pemfile
- path to the PEM file for SSL support
- debugging
- `````````
- debug.dump-unknown-headers
- enables listing of internally unhandled HTTP-headers
- e.g. ::
- debug.dump-unknown-headers = "enable"
- mimetypes
- `````````
- mimetype.assign
- list of known mimetype mappings
- NOTE: if no mapping is given "application/octet-stream" is used
- e.g.: ::
- mimetype.assign = ( ".png" => "image/png",
- ".jpg" => "image/jpeg",
- ".jpeg" => "image/jpeg",
- ".html" => "text/html",
- ".txt" => "text/plain" )
- The list is compared top down and the first match is taken. This is
- important if you have matches like: ::
- ".tar.gz" => "application/x-tgz",
- ".gz" => "application/x-gzip",
- If you want to set another default mimetype use: ::
- ...,
- "" => "text/plain" )
- as the last entry in the list.
- mimetype.use-xattr
- If available, use the XFS-style extended attribute interface to
- retrieve the "Content-Type" attribute on each file, and use that as the
- mime type. If it's not defined or not available, fall back to the
- mimetype.assign assignment.
- e.g.: ::
- mimetype.use-xattr = "enable"
- on shell use:
- $ attr -s Content-Type -V image/svg svgfile.svg
- or
- $ attr -s Content-Type -V text/html indexfile
- debugging
- `````````
- debug.log-request-header
- default: disabled
- debug.log-response-header
- default: disabled
- debug.log-file-not-found
- default: disabled
- debug.log-request-handling
- default: disabled
- debug.log-ssl-noise
- default: disabled
|