1================== 2Configuration File 3================== 4 5------------ 6Module: 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 21Description 22=========== 23 24Basic Syntax 25------------ 26 27A 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 40Example 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 66Conditional Configuration 67========================= 68 69Most 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 84where <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 125and <value> is either a quoted ("") literal string or regular expression. 126 127 128Example 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 175Using variables 176=============== 177 178You 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 191You can also use environement variables or the default variables var.PID and 192var.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 207Or like the lighttpd script for rails does: 208 209 var.basedir = var.CWD 210 211 server.document-root = basedir + "/public/" 212 213Global context 214============== 215 216:: 217 218 global { 219 ... 220 } 221 222You don't need it in the main configuration file. But you might have 223difficulty setting server wide configuration inside a included-file from 224conditionals. 225 226Example 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 244Options 245======= 246 247server module 248------------- 249 250main sections 251````````````` 252 253server.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 262server.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 274server.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 281server.use-ipv6 282 bind to the IPv6 socket 283 284server.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 290server.tag 291 set the string returned by the Server: response header 292 293 Default: lighttpd <current-version> 294 295server.errorlog 296 pathname of the error-log 297 298 Default: either STDERR or ``server.errorlog-use-syslog`` 299 300server.errorlog-use-syslog 301 send errorlog to syslog 302 303 Default: disabled 304 305server.chroot 306 root-directory of the server 307 308 NOTE: requires root-permissions 309 310server.username 311 username used to run the server 312 313 NOTE: requires root-permissions 314 315server.groupname 316 groupname used to run the server 317 318 NOTE: requires root-permissions 319 320server.follow-symlink 321 allow to follow-symlinks 322 323 Default: enabled 324 325index-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 335server.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 381server.event-handler 382 set the event handler 383 384 Default: "poll" 385 386server.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 392server.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 398server.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 405server.name 406 name of the server/virtual server 407 408 Default: hostname 409 410server.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 416server.max-keep-alive-idle 417 maximum number of seconds until a idling keep-alive connection is droped 418 419 Default: 30 420 421server.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 427server.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 433server.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 442server.protocol-http11 443 defines if HTTP/1.1 is allowed or not. 444 445 Default: enabled 446 447server.range-requests 448 defines if range requests are allowed or not. 449 450 Default: enabled 451 452 453SSL engine 454`````````` 455 456ssl.pemfile 457 path to the PEM file for SSL support 458 459debugging 460````````` 461 462debug.dump-unknown-headers 463 enables listing of internally unhandled HTTP-headers 464 465 e.g. :: 466 467 debug.dump-unknown-headers = "enable" 468 469mimetypes 470````````` 471 472mimetype.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 497mimetype.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 516debugging 517````````` 518 519debug.log-request-header 520 default: disabled 521 522debug.log-response-header 523 default: disabled 524 525debug.log-file-not-found 526 default: disabled 527 528debug.log-request-handling 529 default: disabled 530 531debug.log-ssl-noise 532 default: disabled 533